我正在做什么错了?/新手?学习编程

3

我正在尝试在控制台中创建一个简单的计算器,用于单个数字。(实际上,我只关心乘法)

这是我的代码,如果有人能帮助我。

class multiplythisnumber    
{
    static void Main()    
    {
        int input, input1, output; //variable decleration

        System.Console.WriteLine("This application is meant to multiply two single digit numbers.");
        System.Console.WriteLine("You can choose both numbers, however this is only a test.\r I am not sure the read command even does what I think it does.");
        System.Console.WriteLine();

        System.Console.Write("Please enter the first number: ");
        input = System.Console.Read(); //Reads my input + 48(assuming 48 is the value of enter)

        input = input - 48;

        System.Console.WriteLine();

        System.Console.Write("Please enter the second number: ");
        input1 = System.Console.Read(); //Doesn't wasit for input and sets input1 = 13
        System.Console.WriteLine();

        output = input * input1;

        System.Console.WriteLine();
        System.Console.Write("{0} times {1} equals {2}.", input, input1, output);

        System.Console.ReadKey();

    }    
}

我为每个人添加了注释,以解释我正在做什么,也作为个人笔记。
最后一行总是变成"(0) times 13 equals 0." -假设我使用零作为输入1。
编辑: 只是为了澄清,我知道0*13=0(是的,先前它说的是12,现在它确实在说13)。问题在于它不能让我设置input1,只是将其设置为13并继续执行。
编辑2:我想感谢Matt,因为他所做的更改使代码能够正常工作。所以,看起来我有了我的第一个可以做点别的事情而不仅仅告诉你自己名字的代码。

1
没问题。0 乘以 12 等于 0。 - Bala R
不,我的问题是我无法输入第二个输入。 - Tom
1
如果所有不工作的程序都有如此谦虚的免责声明,那该多好啊。 - Rick Sladkey
请查看我对这个问题的回答:http://stackoverflow.com/questions/7509643/java-scanner-skipping-over-some-input/7509745#7509745 - mellamokb
如果input1 = 13,那么它意味着设置的值等于回车键。 - vietean
“48”不是“enter”的值-不确定这个注释的意思。如果您想将输入的字符串转换为数字值,请改用“Int32.TryParse”。并尝试输入除“0”以外的其他值作为input1,以便您可以看到一些有意义的结果,并尝试弄清楚您做错了什么。 - Ken White
5个回答

4

Console.Read() 只读取一个字符。因此,你的第一个 Console.Read() 读取了你的数字,而第二个读取了 CR ASCII 码(13),因为你按下了 "Enter" 键。 请改用 ReadLine()。

    System.Console.Write("Please enter the first number: ");
    string first = System.Console.ReadLine();

    input = Convert.ToInt32(first);

    System.Console.WriteLine();

    System.Console.Write("Please enter the second number: ");
    string second = System.Console.ReadLine();
    input1 = Convert.ToInt32(second);
    System.Console.WriteLine();

    output = input * input1;

    System.Console.WriteLine();
    System.Console.Write("{0} times {1} equals {2}.", input, input1, output);

    System.Console.ReadKey();

1

问题在于您连续读取了两个字符。当您按下“1”键时,input被设置。当您按下Enter键时,input1被读取。不要按Enter键;相反,立即输入两个数字。解决此问题的最佳方法是使用System.Console.ReadLine

System.Console.Read从控制台读取单个字符。当您键入0键时,您的程序实际上读取字符'0'('0' == 48在ASCII中),而不是数字0。

以下是我修复您的程序的方法:

不要使用System.Console.Read读取字符,而应使用System.Console.ReadLine读取整行而不是单个键/字符。这将允许用户输入比一个数字更长的数字。您可以通过使用Int32.Parse将用户的输入从字符串转换为整数。

class multiplythisnumber
{
    static void Main()
    {
    int input, input1, output; //variable decleration

    System.Console.WriteLine("This application is meant to multiply two single digit numbers.");
    System.Console.WriteLine("You can choose both numbers, however this is only a test.\r I am not sure the read command even does what I think it does.");
    System.Console.WriteLine();

    System.Console.Write("Please enter the first number: ");
    input = Int32.Parse(System.Console.Read());

    //input = input - 48;//No need to do this anymore as we have already converted the user's input to an integer.

    System.Console.WriteLine();

    System.Console.Write("Please enter the second number: ");
    input1 = Int32.Parse(System.Console.ReadLine());
    System.Console.WriteLine();

    output = input * input1;

    System.Console.WriteLine();
    System.Console.Write("{0} times {1} equals {2}.", input, input1, output);

    System.Console.ReadKey();

    }

}

1
实际上,无论如何你仍然需要按回车键。它是行缓冲的。 - Jeff Mercado
@Jeff Mercado 你说得对,ReadLine似乎是最好的方法来实现这个。 - Jack Edmonds

1
我认为这是因为你的程序使用了Console.Read()而不是Console.ReadLine()。这意味着它会从输入中每次读取一个字符。你的第一个输入是5+a回车符。尝试使用ReadLine并保护免于输入非整数的内容。你可以使用以下程序来实现你想要的结果。
class Program
{
    static void Main(string[] args)
    {

        int input, input1; 
        string output; //variable decleration

        System.Console.WriteLine("This application is meant to multiply two single digit numbers.");
        System.Console.WriteLine("You can choose both numbers, however this is only a test.\r I am not sure the read command even does what I think it does.");
        System.Console.WriteLine();

        System.Console.Write("Please enter the first number: ");
        int.TryParse(System.Console.ReadLine(),out input); //Reads my input



        System.Console.WriteLine();

        System.Console.Write("Please enter the second number: ");
        int.TryParse(System.Console.ReadLine(), out input1);
        System.Console.WriteLine();
        if (input != 0 && input1 != 0) {
            input = input - 48;
            output = (input * input1).ToString();
        }else
        {
            output = "NaN";//not a number
        }
        System.Console.WriteLine();
        System.Console.Write("{0} times {1} equals {2}.", input, input1, output);

        System.Console.ReadKey();

    }
}

1

这与Read()和ReadLine()的工作方式有关。请尝试使用ReadLine()。


-1

也许你需要一位C#专家来回答,但当我调试时,我发现因为当你输入时,它会推送到控制台13和10。所以你需要Read两次来通过它们。

只需将其复制并粘贴到您的代码中

static void Main()
{
    int input, input1, output; //variable decleration

    System.Console.WriteLine("This application is meant to multiply two single digit numbers.");
    System.Console.WriteLine("You can choose both numbers, however this is only a test.\r I am not sure the read command even does what I think it does.");
    System.Console.WriteLine();

    System.Console.Write("Please enter the first number: ");
    input = System.Console.Read(); //Reads my input + 48(assuming 48 is the value of enter)

    input = input - 48;

    /**
    *HINT: Try to use below double line:
    */   
    System.Console.Read();
    System.Console.Read();

    System.Console.Write("Please enter the second number: ");
    input1 = System.Console.Read(); //Doesn't wasit for input and sets input1 = 13
    System.Console.Read();

    output = input * input1;

    System.Console.WriteLine();
    System.Console.Write("{0} times {1} equals {2}.", input, input1, output);

    System.Console.ReadKey();
}

更新:

您可以尝试查看更多:

static void Main()
{
    Console.Write("Please enter just one number and press enter:");
    int input1 = Console.Read();
    int input2 = Console.Read();
    int input3 = Console.Read();
    Console.WriteLine("You've inputted: {0},{1},{2}",input1, input2, input3);
    Console.ReadKey();
}

输出:

请输入一个数字并按回车键:1
您输入的是:49、13、10


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接