2014-05-12 2 views
0

Попытка сделать код здесь, чтобы сохранить номер штыря и попросить пользователя ввести правильный номер штыря. У пользователя три попытки, и каждый раз, когда они ошибаются, он должен сказать, что у вас осталось 2 попытки и т. Д. И когда правильное должно сказать, что вы ввели правильный вывод.Почему «else if» часть моего кода не показывает, что находится между скобками «else if»?

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

int pin = 1234; 
int guess = 0; 
int count; 


if (guess != pin) 
{ 
    for (count = 2; count > -1; count--) 
    { 
     Console.WriteLine("Enter a 4 digit pin number"); 
     guess = int.Parse(Console.ReadLine()); 



     if(guess != pin) 
     { 
      Console.WriteLine(""); 
      Console.WriteLine("You entered an incorrect pin number, you have {0} attempts remaining", count); 
     } 

    } 
} 
else if (guess == pin) 
{ 
    Console.WriteLine("You have entered the correct pin number"); 
} 

Console.WriteLine(""); 
Console.WriteLine("Press any key to exit"); 

Console.ReadLine(); 
+4

также ...if/else должен, вероятно, находиться в цикле, если вы хотите выполнить его более одного раза. (Или один раз на успех для else должен идти с внутренним if) –

+0

вы пробовали Debug вашего приложения в пошаговом режиме? –

+0

Пожалуйста, действуйте в пробелах и дополнительных пустых строках. Во-вторых, вы зацикливаете, если ошибаетесь, и никогда не получите код в 'else if (guess == pin)', если они не введут его в первый раз. – crashmstr

ответ

0

Ваш код поступает в первый, а затем, если петли три раза, но тест для правильного пин-код находится вне цикла.

Цикл for должен содержать ваши тесты if, потому что у вас есть только два возможных ответа, вам действительно не нужно, и else if, простой else будет делать.
Обратите также внимание, что если вы набрали правильный номер контакта, вы должны выйти для цикла ....

int pin = 1234; 
    int guess = 0; 
    int count; 


    for (count = 2; count > -1; count--) 
    { 
     Console.WriteLine("Enter a 4 digit pin number"); 
     guess = int.Parse(Console.ReadLine()); 



     if(guess != pin) 
     { 
      Console.WriteLine(""); 
      Console.WriteLine("You entered an incorrect pin number, you have {0} attempts remaining", count); 
     } 
     else 
     { 
      Console.WriteLine("You have entered the correct pin number"); 
      break; 
     } 
    } 


    Console.WriteLine(""); 
    Console.WriteLine("Press any key to exit"); 
    Console.ReadLine(); 
0

Принесите свой else if внутри цикла.
Добавить break заявление, чтобы выйти из цикла в случае, если вы не хотите, чтобы попросить другой вход, если первая попытка правильно:

if (guess != pin) 
    { 
     for (count = 2; count > -1; count--) 
     { 
      Console.WriteLine("Enter a 4 digit pin number"); 
      guess = int.Parse(Console.ReadLine()); 

      if(guess != pin) 
      { 
       Console.WriteLine(""); 
       Console.WriteLine("You entered an incorrect pin number, you have {0} attempts remaining", count); 
      } 
      else if (guess == pin) 
      { 
       Console.WriteLine("You have entered the correct pin number"); 
       break; 
      } 
     } 
    } 
+0

большое спасибо, теперь имеет смысл! –

+0

Добро пожаловать :) – Hassan

0

Ваш поток управления просто неправильно, вы читаете вход в и else if находится вне этого.

Вместо этого попробуйте это;

  for (count = 2; count > -1; count--) 
      { 
       Console.WriteLine("Enter a 4 digit pin number"); 
       guess = int.Parse(Console.ReadLine()); 



       if(guess != pin) 
       { 
        Console.WriteLine(""); 
        Console.WriteLine("You entered an incorrect pin number, you have {0} attempts remaining", count); 
       } 
       else if (guess == pin) 
       { 
        Console.WriteLine("You have entered the correct pin number"); 
       } 

      } 

Я просто переместил else, если внутри цикла, чтобы он проверялся каждый раз, когда пользователь что-то вводил. Кроме того, нет необходимости в elseif, вы ahve if(guess != pin), если это значение равно false, тогда угадайте, что он должен быть равен pin, так что просто else будет работать нормально. Else-if требуется только тогда, когда вы проверяете более двух результатов. Если есть только 2 возможных результата, чем простое, если-else имеет больше смысла.

+0

очень полезно, приветствия! –

1

Потому что вы создали логическое условие, в котором это никогда не произойдет. Упрощенное, это ваш код:

int pin = 1234; 
int guess = 0; 
if (guess != pin) 
{ 

} 
else if (guess == pin) 
{ 

} 

Вы имеете явно установить pin и guess различных значения, а затем сразу сравнить их. Поскольку это первое сравнение будет всегда пройти, блок else if никогда не будет оценен.

Я уверен, что есть много способов сделать это сравнение, но одно простое изменение, которое вы можете сделать, - это перемещение вашей логики в пределах цикла, в котором вы принимаете пользовательский ввод, а затем break из цикла, когда правильное число . Что-то вроде этого:

if(guess != pin) 
{ 
    Console.WriteLine(""); 
    Console.WriteLine("You entered an incorrect pin number, you have {0} attempts remaining", count); 
} 
else 
{ 
    Console.WriteLine("You have entered the correct pin number"); 
    break; 
} 
+0

большое спасибо, теперь имеет смысл! –

0

Используйте условие while цикла и с некоторыми изменениями ваш код должен выглядеть следующим образом:

int pin = 1234; 
int guess = 0; 
int count = 3; 

while (guess != pin && count > 0) 
{ 
    Console.Write("Enter a 4 digit pin number: "); 
    int.TryParse(Console.ReadLine(), out guess); 
    if (guess != pin) 
    { 
     Console.WriteLine(""); 
     Console.WriteLine("You entered an incorrect pin number, you have {0} attempts remaining", count - 1); 
    } 
    else 
    { 
     Console.WriteLine("You have entered the correct pin number"); 
    } 
    count--; 
} 
Console.ReadLine(); 
Смежные вопросы