2016-03-24 1 views
0

Я делал калькулятор в C#. Вот умножение часть ---Почему консоль закрывается после ввода да?

using System; 
static class calculator 
{ 
    public static void Main() 
    { 
    welcome: 
    Console.WriteLine("Welcome to my calculator, please press enter to   continue"); 
    Console.ReadLine(); 
    Console.WriteLine("Do you want to add, subtract, multiply or divide?"); 
    string x = Convert.ToString(Console.ReadLine()); 
    if (x == "multiply") 
    { 
     Console.WriteLine("Please enter the first value"); 
     decimal value1multiply = Convert.ToDecimal(Console.ReadLine()); 
     Console.WriteLine("Please enter the second value"); 
     decimal value2multiply = Convert.ToDecimal(Console.ReadLine()); 
     Console.WriteLine("Result ="); 
     Console.WriteLine(value1multiply * value2multiply); 
     Console.WriteLine("Thank you for using my calculator!Do you still want to use it?Please answer in 'yes' or 'no' and press 'enter'"); 
     Console.ReadLine(); 
     string yesorno =Console.ReadLine(); 
     if (yesorno == "yes") 
     { 
      goto welcome; 
     } 
     if (yesorno == "no") 
     { 
      Environment.Exit(0); 
     } 
    } 
     } 
     } 

Когда я типа «да», когда он просит меня, консоль должна привести меня приветствовать. Но вместо этого он ничуть не ведет и остается пустым. Когда я снова нажимаю клавишу, консоль закрывается. Почему это происходит и как я могу это предотвратить?

То, что я пробовал:

Я попытался удалить environment.exit (0), полагая, что консоль ведет меня к тому, что, но это не помогло. Я даже попытался ввести код в Visual Studio, но никакой разницы в результатах. (Я использую острое развитие)

+3

вместо goto - использование в то время как состояние. goto не следует использовать, его считается плохой практикой – Mafii

+0

строка явно не есть и не да - вот почему она по-прежнему закрыта при удалении environment.exit. рассмотрите возможность проверки значения yesorno с точкой останова – Mafii

+1

удалите консоль .readline перед строкой yesorno = Console.ReadLine(); – rashfmnb

ответ

7

Помимо использования goto, на который часто нахмуривают, вы используете слишком много звонка ReadLine.

Здесь:

Console.ReadLine(); 
string yesorno = Console.ReadLine(); 

Может быть, вы набрали yes, а затем нажмите Enter дважды. В этом случае yesorno будет пустым, и ваш чек не сработает. Первая запись проглатывается первым ReadLine, который не был присвоен переменной.

+0

Спасибо, большой ответ исправил проблему полностью. – makertech81

+0

Добро пожаловать. Научитесь знакомиться с вашим отладчиком. Это поможет вам в следующий раз. Установите точку останова в строке, которую вы хотите исследовать. Тогда вы бы увидели, что он попал * после того, как вы набрали * да *. –

 Смежные вопросы

  • Нет связанных вопросов^_^