2014-10-28 4 views
3

Это моя полная программа. Очевидно, я новичок. Проблема, с которой я сталкиваюсь, заключается в том, что если возраст меньше нуля, тогда он возвращается к нескольким строкам, но он снова спрашивает пользователя о штыре. :(Что я могу сделать, чтобы исправить это?C# label и goto

using System; 

    namespace Examples 
    { 
     class Program 
     { 
      static void Main(string[] args) 
      { 
       string name; 
       string city; 
       int age; 
       int pin; 

       // \n is used for line-break 
       Console.Write("Enter your name : "); 
       name = Console.ReadLine(); 

       Console.Write("\nEnter Your City : "); 
       city = Console.ReadLine(); 

       age: 
       Console.Write("\nEnter your age : "); 
       age = Int32.Parse(Console.ReadLine()); 

       Console.Write("\nEnter your pin : "); 
       pin = Int32.Parse(Console.ReadLine()); 

       if (age < 0 || age >= 110) 
       { 
        goto age; 

       } 


       // Printing message to console 
       //formatting output 
       Console.WriteLine("=============="); 
       Console.WriteLine("Your Complete Address:"); 
       Console.WriteLine("============\n"); 

       Console.WriteLine("Name = {0}", name); 
       Console.WriteLine("City = {0}", city); 
       Console.WriteLine("Age = {0}", age); 
       Console.WriteLine("Pin = {0}", pin); 
       Console.WriteLine("==============="); 

       Console.ReadLine(); 
      } 
     } 
    } 
+3

О, пожалуйста, не используйте 'goto' заявление –

+1

Ваш новый, но вы хотите потерять свою увлекательность с' goto' как можно скорее :) – Tim

+1

GOTOS плохо, и вы должны чувствовать себя плохо. – NaeiKinDus

ответ

0

Вы можете установить штифт -1, и проверить против него.

также, вы можете получить в религиозную войну с этим GOTO заявление .. . :) , как правило, это нахмурилось, его, безусловно, можно избежать здесь, но некоторые люди скажут, что все в порядке. до вас действительно.

Я добавлю код и вставьте его.

void Main() 
{ 
    string name; 
    string city; 
    int age; 
    int pin; 

    // \n is used for line-break 
    Console.Write("Enter your name : "); 
    name = Console.ReadLine(); 

    Console.Write("\nEnter Your City : "); 
    city = Console.ReadLine(); 

    age = GetAge(); 

    //... eluded 

Console.ReadLine(); 
} 

// Define other methods and classes here 
private int GetAge() { 
    Console.Write("\nEnter your age : "); 
    int age = -1; 
    while (age <0 || age>110) { 
     age = Int32.Parse(Console.ReadLine()); 
    } 
    return age; 
} 

с использованием метода было бы более уместно в данном случае :)

+0

Как я могу использовать его без goto? –

+0

как выше ... вызов метода. вы можете проверить возраст менее 110, я тоже предполагаю. – Noctis

+0

Но у меня есть 115-летняя леди по улице от меня! –

3

Итак, если я правильно понять это, вы хотите, чтобы запросить возраста, если он меньше 0 или больше, чем 110?

Прежде всего, не идут с этикетками, они уродливы, и вы не хотите использовать их, вместо того, чтобы вы могли использовать сделать в то время как цикл, но есть много возможностей:

Кроме того, вместо использование синтаксиса \n, вы можете также использовать Console.WriteLine

string name; 
string city; 
int age; 
int pin; 

// \n is used for line-break 
Console.Write("Enter your name : "); 
name = Console.ReadLine(); 

Console.Write("\nEnter Your City : "); 
city = Console.ReadLine(); 
age = -1; 

while (age < 0 || age >= 110) 
{ 
    Console.Write("\nEnter your age : "); 
    age = Int32.Parse(Console.ReadLine()); 

    if (age < 0 || age >= 110) 
    { 
     Console.WriteLine("The age must be between 0 and 110."); 
    } 
} 


Console.Write("\nEnter your pin : "); 
pin = Int32.Parse(Console.ReadLine()); 


// Printing message to console 
//formatting output 
Console.WriteLine("=============="); 
Console.WriteLine("Your Complete Address:"); 
Console.WriteLine("============\n"); 

Console.WriteLine("Name = {0}", name); 
Console.WriteLine("City = {0}", city); 
Console.WriteLine("Age = {0}", age); 
Console.WriteLine("Pin = {0}", pin); 
Console.WriteLine("==============="); 

Console.ReadLine(); 
+0

Я хочу показать сообщение об ошибке пользователю! что возраст должен быть только между 0 и 110, если он не вводит действительный возраст. –

+0

Я обновил код, чтобы показать вам сообщение об ошибке. – Complexity

0

Goto Этикетка является довольно старым реликтом от самых истоков C, вы должны избегать его. Вы можете достичь того же, реализовав петлю

Console.WriteLine("Enter your pin : "); 
pin = Int32.Parse(Console.ReadLine()); 
while (age < 0 || age >= 110) 
{ 
    Console.WriteLine("Enter your age : "); 
    int age = Int32.Parse(Console.ReadLine()); 
} 
1

и можно использовать функции понятие здесь, а и должны использовать функции

  Console.Write("\nEnter your age : "); 
      age = Int32.Parse(Console.ReadLine()); 
      if (age < 0 || age >= 110) 
      { 
       //show error msg 

      } 
      Console.Write("\nEnter your pin : "); 
      pin = Int32.Parse(Console.ReadLine()); 

      //if every data is corrent - run function 
      showinfo(); 
//////////// 
      showinfo() 
      { 
      Console.WriteLine("=============="); 
      Console.WriteLine("Your Complete Address:"); 
      Console.WriteLine("============\n"); 

      Console.WriteLine("Name = {0}", name); 
      Console.WriteLine("City = {0}", city); 
      Console.WriteLine("Age = {0}", age); 
      Console.WriteLine("Pin = {0}", pin); 
      Console.WriteLine("==============="); 

      Console.ReadLine();} 

как заявил @noctis ..use из Гото следует избегать. его создает проблемы ... также, пожалуйста, проверьте - negetivenumber исключение понятия ... вы можете использовать исключение ур тоже слишком

-1

Просто переместите свое состояние перед подсказкой булавки.

age: 
Console.Write("\nEnter your age : "); 
age = Int32.Parse(Console.ReadLine()); 

if (age < 0 || age >= 110) 
{ 
    goto age; 
} 

Console.Write("\nEnter your pin : "); 
pin = Int32.Parse(Console.ReadLine()); 
Смежные вопросы