2014-09-20 2 views
0

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

public void AreaOfRectangle() 
{ 
    Console.WriteLine("Enter Width"); 
    Width = Convert.ToInt32(Console.ReadLine()); 
    Console.WriteLine("Enter Length"); 
    Lenth = Convert.ToInt32(Console.ReadLine()); 
    //Width = 24.5; 
    //Lenth = 24.5; 
    //double area; 
} 

но если я пишу то же самое в поле ниже образом я получаю неправильное значение области.

public void AreaOfRectangle() 
{ 
    Console.WriteLine("Enter Width"); 
    Width = Console.Read(); 
    Console.WriteLine("Enter Length"); 
    Lenth = Console.Read(); 
    //Width = 24.5; 
    //Lenth = 24.5; 
    //double area; 
} 

Может ли кто-нибудь сказать мне, в чем разница между двумя методами логики?

+2

Convert.ToInt32() не получит вас 24.5 Вам нужно Convert.ToDouble() –

ответ

2

According to the documentationConsole.Read() читает следующий символ.

Так что, если вы вводите:

42 

Тогда Console.Read() вернется только 4 (как персонаж, который 52 как int, если я не ошибаюсь). Затем следующий вызов будет читать 2, который равен 50 int. Он в основном читает следующий символ и интерпретирует его как целое.

Чтобы вы могли прочитать целую строку, лучше придерживаться Console.ReadLine().

1

Первый читает строку и разбирает ее в int. Он будет читать всю информацию, которую вы вводите, до Enter.

Второй читает char. Как сказал Томас, обратите внимание, что если вы наберете 123 и нанесете Enter, Console.Read() возьмет только 1, но если у вас есть последующие Console.Read(), это займет 2, а затем 3. Поэтому я сомневаюсь, что это то, чего вы пытаетесь достичь.

Если вы попытаетесь вычислить область, умножив символы ... это не имеет смысла.

Я рекомендовал бы использовать:

int width = 0; 
width = Int32.TryParse(Console.ReadLine(), out width); 

Теперь ширина будет ноль, или действительный внутр.

И, как говорится в комментарии, если вы ищете что-то вроде 24.5, перейдите на Double.TryParse.

+0

argh ... true ... – Noctis

+0

Понял теперь. Спасибо за быстрый ответ. – user1794624

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