2013-08-21 3 views
1
using System; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Int32 a = 3; 
      Int32 b = 5; 

      a = Console.Read(); 

      b = Convert.ToInt32(Console.ReadLine()); 

      Int32 a_plus_b = a + b; 
      Console.WriteLine("a + b =" + a_plus_b.ToString()); 
     } 
    } 
} 

Я получаю сообщение об ошибке в функции ReadLine():Console.Read() и Console.ReadLine() FormatException

FormatException был необработанным.

В чем проблема?

+2

Может быть строка, которую вы ставите не является действительным числом? Попробуйте прочитать данные в переменной и добавить некоторую проверку с помощью 'TryParse' – wudzik

+0

На какой конкретной строке указывается эта ошибка и каковы значения этих переменных .. –

+0

Если я прокомментирую« a = ... »или« b = .. . ", тогда все в порядке. Значения являются просто простыми числами, такими как 4 или 7. – BlackCat

ответ

3

Я думаю, это просто потому, что вы нажав ENTER после ввода первого номера. Анализ вашего кода. Ваш код считывает первый символ, который вы ввели в a, переменную, которая Read() функция делает. Но когда вы нажимаете клавишу ввода, функция ReadLine() возвращает пустую строку, и это неверный формат, чтобы преобразовать его в целое.

Предлагаю вам использовать функцию ReadLine() для чтения обеих переменных. Поэтому вход должен быть 7->[enter]->5->[enter]. Тогда вы получите a + b = 12.

static void Main(string[] args) 
{ 
    Int32 a = 3; 
    Int32 b = 5; 

    a = Convert.ToInt32(Console.ReadLine()); 
    b = Convert.ToInt32(Console.ReadLine()); 

    Int32 a_plus_b = a + b; 
    Console.WriteLine("a + b =" + a_plus_b.ToString()); 
} 
+0

YES, iput1: 5 [enter] -> У меня есть исключение input2: 56 [enter] ---> Все в порядке – BlackCat

+0

Что делать, чтобы этого избежать? – BlackCat

+0

@BlackCat Я отредактировал свой ответ – Reniuz

1

Я думаю, вам нужно поставить:

b = Convert.ToInt32(Console.ReadLine());

Внутри try-catch блока.

Удачи.

1
namespace ConsoleApplication1 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 
     Int32 a = Convert.ToInt32(Console.ReadLine()); 
     Int32 b = Convert.ToInt32(Console.ReadLine()); 

     Console.WriteLine("a + b = {0}", a + b); 
    } 
} 

}

+0

Возвращаемое значение ReadLine() - это строка. вы должны преобразовать его в Int32 – BlackCat

+0

Изменить «Int32 b = 5;» в строку b = "5"; – N8tiv

+0

«a» также объявлен как Int32, вам нужно добавить Convert.ToInt32 в свой метод Console.Read ... – N8tiv

1

То, что вы хотите сделать, это использовать попробовать поймать, так что если кто-то ставит во что-то неправильно, то вы можете узнать

using System; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Int32 a = 3; 
      Int32 b = 5; 

      a = Console.Read(); 
      try 
      { 
       b = Convert.ToInt32(Console.ReadLine()); 
       Int32 a_plus_b = a + b; 
       Console.WriteLine("a + b =" + a_plus_b.ToString()); 
      } 
      catch (FormatException e) 
      { 
       // Error handling, becuase the input couldn't be parsed to a integer. 
      } 


     } 
    } 
} 
+0

Я пробовал это. Ввод: 5 После того, как я нажал кнопку ввода, программа будет завершена, потому что она получила исключение в блоке try. – BlackCat

+0

Я предпочитаю tryParse, а не блок tryCatch – jomsk1e

+0

Да Blackcat, это цель try, except. Поскольку вы можете продолжить выполнение обычного кода, вам необходимо выполнить некоторую обработку ошибок. Если это небольшая ошибка, и вы хотите продолжить, вы должны использовать tryParse, как говорит JRC. Поэтому, если я пишу «q», и вы просто хотите заменить мое значение на 0, вы можете сделать tryParse, если он не сработает, просто установите значение 0. – Smarties89

0

Вы можете попробовать это:

Int32 a = 3; 
Int32 b = 5; 

if (int.TryParse(Console.ReadLine(), out a)) 
{ 
    if (int.TryParse(Console.ReadLine(), out b)) 
    { 
     Int32 a_plus_b = a + b; 
     Console.WriteLine("a + b =" + a_plus_b.ToString()); 
    } 
    else 
    { 
     //error parsing second input 
    } 
} 
else 
{ 
    //error parsing first input 
}