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

社区。

我正在学习如何在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?"); } } 

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

//

48 + 13

48 * 13

48-13

48/13

Mindblown,对吧?

//

不要使用Console.Read因为它不会做预期的事情:

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

在这里从devshort很好的解释为什么第二次调用Console.Read “跳过”:

如果首先输入值“1”,则将其转换为ascii表示形式。 然后回车在屏幕[输入]缓冲区中是STILL,所以当你点击下一个读(Console.Read)它读取换行并将其转换为数字。

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


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

可视0的ascii具有48或0x30的字节值。 这解释了48。

基本上,你正在使用错误的功能。

好的,我编辑了你的代码,并添加了一些解释,我改变了一些..

  string name, age, favColor; int num1, num2, sum, mult, subs; float div; Console.WriteLine("What is your name? "); //Start a new line and write .. name = Console.ReadLine(); //Read the whole line Console.WriteLine("\nHello, {0}", name); //{0} stands for the first variable you refer to after the, etc Console.WriteLine("How old are you? "); age = Console.ReadLine(); Console.WriteLine("\nSo you are {0}, I thought that you were older!", age); // something new.. \n refers to a "new line", so instead of writing Console.Writeline(); you can use this Console.WriteLine("What is your favorite Color? "); favColor = Console.ReadLine(); Console.WriteLine("{0} is a cool color!\n", favColor); Console.WriteLine("Nice meeting you, {0}", name); Console.WriteLine("Have a good day!\n"); Console.WriteLine("Let us do some operations, {0}", name); Console.WriteLine("Please enter a number: "); num1 = Convert.ToInt16(Console.ReadLine()); //int.TryParse(Console.ReadLine(), out num1); //Another way is to "try parse", try converting a string to an integer Console.WriteLine("\nPlease enter another number: "); num2 = Convert.ToInt16(Console.ReadLine()); //int.TryParse(Console.ReadLine(), out num2); //Another way is to "try parse", try converting a string to an integer where out is the returning variable sum = num1 + num2; mult = num1 * num2; subs = num1 - num2; div = num1 / num2; Console.WriteLine("\nAlright, {0}", name); Console.WriteLine("Let us blow up your mind!\n"); //Again use {0} ... which writes easier than having to use + every time, //its not wrong but its easier this way Console.WriteLine("{0} + {1} = {2}", num1, num2, sum); Console.WriteLine("{0} * {1} = {2}", num1, num2, mult); Console.WriteLine("{0} - {1} = {2}", num1, num2, subs); Console.WriteLine("{0} / {1} = {2}", num1, num2, div); Console.WriteLine("\nMindblown, Right?"); Console.ReadLine(); //Console.ReadLine(); at the end to prevent the program from closing