【问题标题】:Console.Read not returning my int32 [duplicate]Console.Read 没有返回我的 int32 [重复]
【发布时间】:2011-12-09 12:51:11
【问题描述】:

我不明白为什么我的整数没有正确输出,Console.Read() 方法说它正在返回一个整数,为什么 WriteLine 没有正确显示它?

int dimension;
dimension = Console.Read();
Console.WriteLine(""+ dimension);

【问题讨论】:

  • 你输入了什么?输出了什么?
  • 一个整数。当我输入 10 时,它显示为 49。我尝试了类型转换,但它仍然是 49。
  • 您的代码运行正常。您正在阅读一个字符。如果您想在 10 中阅读,那么您应该使用 ReadLine() 这当然不能解决您的代码可能存在很多问题的事实。

标签: c#


【解决方案1】:

Console.Read() 只返回输入内容的第一个字符。你应该使用Console.ReadLine():

示例:

int suppliedInt;

Console.WriteLine("Please enter a number greater than zero");
Int32.TryParse(Console.ReadLine(), out suppliedInt);

if (suppliedInt > 0) {
    Console.WriteLine("You entered: " + suppliedInt);
}
else {
    Console.WriteLine("You entered an invalid number. Press any key to exit");
}

Console.ReadLine();

其他资源:

MSDN - Console.Read()

MSDN - Console.ReadLine()

【讨论】:

  • In real life, you should use Int32.TryParse() and handle the exception 但是TryParse 不会抛出,这就是重点。
  • @Joren, exception 显然不是在这种情况下使用的正确词。我已经更新了我的答案,以提供我提到的“真实世界”部分。
  • 我会做:if(Int32.TryParse()) 检查转换是否成功然后输出结果,因为输入可以是
  • @Reniuz,您可以根据要求采用多种不同的方式(OP 中并未真正说明)。这只是一个让他们朝着正确方向思考的简单示例。
  • 我知道 :) 我给了你赞成票,但在评论中添加了注释就是这样。
【解决方案2】:

From the MSDN:

返回值

类型:System.Int32 输入流中的下一个字符,或 如果当前没有更多字符,则为负一 (-1) 阅读。

【讨论】:

    【解决方案3】:

    您的程序正在返回,但您没有看到,请看下面的代码块:

    如果输出窗口不停留,您将无法看到输出。

    int dimension;
    dimension = Console.Read();
    Console.WriteLine("" + dimension);
    Console.ReadLine();
    

    【讨论】:

      【解决方案4】:

      Console.Read() 返回输入中第一个符号的 ASCII 码。你可以这样做

      int dimension;
      dimension = Console.Read();
      Console.WriteLine(""+ (char)dimension);
      

      你会在输入中看到正确的第一个符号,如

      (char)dimension
      

      会通过它的 ASCII 码给你符号。

      【讨论】:

        【解决方案5】:
        int a = 0;
        if(Int32.TryParse(Console.ReadLine(), out a))
        {
            // Do your calculations with 'a' 
        }
        else
        {
            // Some warnings
        }
        

        【讨论】:

          【解决方案6】:

          Console.Read 方法仅返回包裹在 int 中的单个字符,因此这仅适用于您读取的数字只有一位长,否则您将始终只能获得第一位。

          由于Read的返回值实际上是一个字符,所以不能直接作为整数使用,需要从字符解析为整数。

          但假设您想要一个长于一位数的数字,那么您确实需要改用Console.ReadLine 并使用int.TryParse 将输入转换为整数。如果int.TryParse 返回false,您可以警告用户他提供了无效输入并再次请求维度。

          示例代码:

          整数维度;

          bool isValidDimension;
          do
          {
              Console.Write("Dimension: ");
          
              string input = Console.ReadLine();
          
              isValidDimension = int.TryParse(input, out dimension);
          
              if (!isValidDimension)
              {
                  Console.WriteLine("Invalid dimension... please try again.");
                  Console.WriteLine();
              }
          } while (!isValidDimension);
          

          【讨论】:

            【解决方案7】:

            你应该这样做

            static void Main() 
            {
                int Number;
                string strNumber;
            
                strNumber = Console.ReadLine();
                Number = int.Parse(strNumber);
                Console.WriteLine("" + dimension);
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2012-08-31
              • 2021-07-02
              • 1970-01-01
              • 2019-03-15
              • 2020-05-15
              • 2017-05-19
              • 2020-12-24
              相关资源
              最近更新 更多