2014-01-26 4 views
2

Я хочу прочитать двойное значение и целочисленное значение из консольного приложения на C#. `Ввод не в правильном формате

  int ch = Console.Read(); 
      Console.WriteLine("Enter a random integer"); 
      int x = int.Parse(Console.ReadLine()); 



      switch (ch) 
      { 
       case 1: 

        TempServiceRef.Service1Client s1 = new ConsoleTempApplication.TempServiceRef.Service1Client(); 
        Console.WriteLine("Enter temperature"); 
        string n = Console.ReadLine(); 
        int param = int.Parse(n); 
        double result = s1.c2f(param); 
        Console.WriteLine(result); 
        Console.ReadLine(); 
        break; 

       case 2: 

        TempServiceRef.Service1Client s2 = new ConsoleTempApplication.TempServiceRef.Service1Client(); 
        Console.WriteLine("Enter temperature"); 
        int param1 = int.Parse(Console.ReadLine()); 
        double result1 = s2.f2c(param1); 
        Console.WriteLine(result1); 
        Console.ReadLine(); 
        break; 

       default: 
        Environment.Exit(0); 
        break; 
      } 
      ` 

Консоль приложение закрывается, когда я пытаюсь войти в мое значение гл. Иногда он закрывается после того, как я даю значение температуры. Я попытался использовать tryParse и Convert.toInt. Но я не получаю никаких результатов. Кто может мне помочь? Далее ... Я просто ожидаю, что пользователь будет вводить только целые значения (как предположение). Использование tryparse в этом случае не является обязательным?

+0

вам нужно добавить 'Console.ReadLine()', чтобы завершить reading.check мой ответ. –

ответ

0

Задача 1: Вы используете метод Console.Read() для чтения одного символа из console.but здесь вам нужно нажать Enter key вернуть введенное значение/характер, как вы используете Console.Read() method.so при нажатии метод Enter Console.ReadLine() получит значение Empty string и int.Parse() выдает исключение в пустых строках.

Решение 1: вам нужно добавить Console.ReadLine() после метода Console.Read() прочитать первый символ. и тогда вы можете продолжить.

Попробуйте:

  int ch =Console.Read();    
      Console.ReadLine(); //add this statement 
      Console.WriteLine("Enter a random integer"); 
      int x = int.Parse(Console.ReadLine()); 

Задача 2: Вы tryig сравнить символы, вводимые с консоли на номера напрямую, не работает, когда вы читали символ из консоли он будет хранить его ASCII-значение не прямое целое число. Например, если вы введете 1 с консоли, он будет сохранен как 49 в целочисленной переменной ch (код ACII 1 из 49), поэтому при сравнении с 1 оно не совпадает.

Решение 2:, поэтому вам необходимо совместить его значение символа. поэтому добавьте значения в одинарные кавычки, чтобы они совпадали с точным значением, введенным в консоли.

Попробуйте: заключите 1 и 2 в одинарные кавычки

  switch (ch) 
      { 
       case '1': 
       --- 
       break; 
       case '2': 
       ----- 
       break; 
      } 

Полный код:

 int ch = Console.Read(); 
     Console.ReadLine();//Add this line to complete reading of a character 
     Console.WriteLine("Enter a random integer"); 
     int x = int.Parse(Console.ReadLine()); 



     switch (ch) 
     { 
      case '1': 

       TempServiceRef.Service1Client s1 = new ConsoleTempApplication.TempServiceRef.Service1Client(); 
       Console.WriteLine("Enter temperature"); 
       string n = Console.ReadLine(); 
       int param = int.Parse(n); 
       double result = s1.c2f(param); 
       Console.WriteLine(result); 
       Console.ReadLine(); 
       break; 

      case '2': 

       TempServiceRef.Service1Client s2 = new ConsoleTempApplication.TempServiceRef.Service1Client(); 
       Console.WriteLine("Enter temperature"); 
       int param1 = int.Parse(Console.ReadLine()); 
       double result1 = s2.f2c(param1); 
       Console.WriteLine(result1); 
       Console.ReadLine(); 
       break; 

      default: 
       Environment.Exit(0); 
       break; 
     } 
+0

Эй, спасибо большое. Но я это понял. Но это противоречит вашему ответу. Код работал без меня, чтобы использовать одинарные кавычки. Я не знаю, в чем причина. Но http://msdn.microsoft.com/en-us/library/aa664749(v=vs.71).aspx также говорит то же самое. И вы были правы относительно части readLine(). Большое спасибо. Я думаю, что я сравнивал целое число ... не символы ... Я думаю, что это имеет смысл – sdwaraki

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