Console.Read()无法正常工作

时间:2016-04-14 11:33:23

标签: c# insert

        int y = 0; 
        Console.WriteLine("insert x");
        int x = Console.Read();
        Console.WriteLine("insert n");
        int n = Console.Read();
        Console.WriteLine("insert a");
        int a = Console.Read();
        int sum  = (2 * n - 1) * a;
        int sum2 = (2 * n * a);
        int sum3 = (2 * n + 1) * a;
        if (x <= 0) y = 0;
        else if (x > sum && x <= sum2) y = a;
        else if (x > sum2 && x <= sum3 || n <= 3 || n >= 1) y = 0;
        Console.WriteLine("Y = " + y);
        Console.ReadLine();

    }

无法插入所有值。在我插入x y打印和控制台关闭后,我的错误是什么?

4 个答案:

答案 0 :(得分:2)

而不是Read使用ReadLine。只有这样,您才可以确保用户实际按下ENTER并返回整行 - Read阻止,直到用户按下ENTER,然后返回ASCII只有一个字符的代码。如果您阅读documentation示例,则会变得清晰。

在您的示例中,如果您输入&#34; 1&#34;然后按ENTER,下次拨打Read将实际返回1\r\n的ASCII代码。

要明确:Read 会返回输入的号码,但会输入您输入的字符的 ASCII码,所以你错误地使用它 - 你需要做的是将用户输入的字符串转换为如此数字:

int number = Convert.ToInt32(Console.ReadLine());

你也可以像这样容易地检查错误:

int number;
if (!Int32.TryParse(Console.ReadLine(), out number))
{
    Console.WriteLine("What you entered is not a number!");
    return;
}

答案 1 :(得分:1)

Console.Read仅读取下一个字符。这不是你想要的。会发生什么:

  • 您输入7 =&gt;你读了0x37
  • 的字符(ascii代码)x
  • ENTER =&gt;您为0x0A阅读了\rn) 等...

您希望使用Console.ReadLine(),当您点击 ENTER 时会终止,并返回string,您可以将其解析为int

Console.Write("Insert x: ");
string input = Console.ReadLine();
int x = int.Parse(input);

如果用户键入&#34; abc&#34;您可能希望添加错误处理。而不是int或使用

int x;
if (!int.TryParse(input, out x))
    Console.WriteLine("This was no number!");

答案 2 :(得分:0)

您应该使用ReadLine并转换为int 32

这是正确的代码:

        int y = 0;
        Console.WriteLine("insert x");
        int x = Convert.ToInt32(Console.ReadLine());
        Console.WriteLine("insert n");
        int n = Convert.ToInt32(Console.ReadLine());
        Console.WriteLine("insert a");
        int a = Convert.ToInt32(Console.ReadLine());
        int sum = (2 * n - 1) * a;
        int sum2 = (2 * n * a);
        int sum3 = (2 * n + 1) * a;
        if (x <= 0) y = 0;
        else if (x > sum && x <= sum2) y = a;
        else if (x > sum2 && x <= sum3 || n <= 3 || n >= 1) y = 0;
        Console.WriteLine("Y = " + y);
        Console.ReadLine();

答案 3 :(得分:0)

每个人都给出了解决方案但其原因 你的代码不起作用就是这个。

在     Console.Read

返回keypressed的ASCII值。 这意味着说出像

这样的东西
int i = Console.Read();

点击键盘上的4键将存储值53,这是变量i中4键的ASCII值,而不是你想要的整数“4”。

通过在Console.Read之后使用断点来完全理解这个检查变量值,以查看变量a,n和y中真正存储的内容。