3

社区。

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

}

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

//

48+13

48*13

48-13

48/13

脑洞大开是吧?

//

4

3 回答 3

5

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

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

这是 devshort 关于为什么第二次调用Console.Read“跳过”的一个很好的解释:

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

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


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

于 2013-02-13T22:48:30.587 回答
2

视觉上的 ascii0字节值为 48. 或0x30. 这解释了48。

基本上,您使用了错误的功能。

于 2013-02-13T22:49:24.517 回答
0

好的,我稍微编辑了你的代码并添加了一些解释,因为我改变了一些东西..

        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
于 2013-02-13T23:26:02.987 回答