C#程序不评估操作并返回错误的答案

Jam*_*lat 3 c# windows oop cmd notepad++

社区.

我正在学习如何用C#编程.我写了这个小程序,它从用户那里获取名称,年龄,喜欢的颜色和两个数字.我使用Notepad ++编写代码并从Windows命令提示符运行C#编译器.这是该程序的源代码

using System;

class ShowSomething
{
static void Main(string[] args)

{
    string name, age, favColor;
    int num1,num2, sum, mult, subs;
    float div;


    Console.Write("What is your name? ");
    name = Console.ReadLine();
    Console.WriteLine("Hello, " + name);

    Console.WriteLine();

    Console.Write("How old are you? ");
    age = Console.ReadLine();
    Console.WriteLine("So you are " + age, "I thought that you were older!");

    Console.WriteLine();

    Console.Write("What is your favorite Color? ");
    favColor = Console.ReadLine();
    Console.WriteLine(favColor + " is a cool color!");

    Console.WriteLine();

    Console.WriteLine("Nice meeting you, " + name, "Have a good day!");

    Console.WriteLine();

    Console.WriteLine("Let us do some operations, " + name);

    Console.WriteLine();

    Console.Write("Please enter a number: ");
    num1 = Console.Read();

    Console.Write("Please enter another number: ");
    num2 = Console.Read();

    sum = num1 + num2;
    mult = num1 * num2;
    subs = num1 - num2;
    div = num1 / num2;


    Console.WriteLine();

    Console.WriteLine("Alright, " + name, "Let us blow up your mind!");

    Console.WriteLine();

    Console.WriteLine(num1 + "+" + num2, "=" + sum);
    Console.WriteLine(num1 + "*" + num2, "=" + mult);
    Console.WriteLine(num1 + "-" + num2, "=" + subs);
    Console.WriteLine(num1 + "/" + num2, "=" + div);

    Console.WriteLine();
    Console.WriteLine("Mindblown, Right?");
}   

}
Run Code Online (Sandbox Code Playgroud)

当我执行程序时几乎一切都顺利.但是,当用户输入第一个操作数时,程序跳过第二个提示并打印与预期结果完全不同的结果.例如,如果我将0作为第一个数字,程序将跳转到操作并打印以下内容:

//

48 + 13

48*13

48-13

48/13

精打细算,对吧?

//

小智 5

不要使用,Console.Read因为它没有做到预期的:

从标准输入流中读取下一个字符(并返回表示它的整数值1).

这里有一个很好的解释,从devshort为什么第二次调用Console.Read"跳过":

如果您为第一件事输入值"1",它会将其转换为ascii表示.然后在屏幕[输入]缓冲区中回车仍为STILL,因此当您点击下一个读取(Console.Read)时,它会读取换行符并将其转换为数字.

相反,一种方法是使用Console.ReadLine(或返回一个字符串)代替int.Parse或类似的方式.


1提示:回车符的值为13.

  • 这个.如果您为第一件事输入值"1",它会将其转换为ascii表示.然后回车在屏幕缓冲区中仍然是STILL,所以当你点击下一个"Read"时,它会读取换行符并将其转换为数字.如果您为第一个输入输入了多个字符,它将读取第一个字符,然后第二个读取将读取第二个字符.介意不要吹.这样做而不是你的读:`Convert.ToInt32(Console.ReadLine());` (3认同)
  • @devshorts确实.感谢您对跳过行为的解释. (2认同)