为什么Read()函数不能按预期工作?

4

我正在使用Visual Studio 2008来写C#代码。我不明白为什么这段简单的代码不能按照预期工作。有任何想法吗?谢谢!

using System;

namespace TryRead
{
    class Program
    {
        static void Main()
        {
            int aNumber;
            Console.Write("Enter a single character: ");
            aNumber = Console.Read(); **//Program waits for [Enter] key. Why?**
            Console.WriteLine("The value of the character entered: " + aNumber);
            Console.Read(); **//Program does not wait for a key press. Why?**
        }
    }
}
2个回答

4

//程序等待[Enter]键。为什么?

Read方法会在您输入字符时阻塞其返回;当您按下Enter键时,它才终止。按Enter键会将一个平台相关的行终止序列附加到您的输入中(例如,Windows会附加回车换行序列)。

//程序不等待按键。为什么?

随后调用Read方法一次只会检索一个字符的输入[无需阻塞]。在检索完最后一个字符后,Read会再次阻塞其返回并重复这个循环。

http://msdn.microsoft.com/en-us/library/system.console.read.aspx


感谢你的回答。由于某些原因,我正在使用学习C#的书(Barbara Doyle的《从问题分析到程序设计的C#编程》)没有提到这种行为。其他人建议使用KeyAvailable。我想我会去看看它。 - Jimmy
换句话说,Read() 的作用是在按下 Enter 键之后循环遍历输入的字符,而不是在按键时循环遍历。 - Greg
显然我太菜了,无法理解KeyAvailable,而且帮助似乎表明ReadKey是指注册表。我想我只能使用ReadLine了。我很惊讶这段代码似乎没有产生书中所示的结果。有没有适合新手的书推荐? - Jimmy
请查看ReadKey,而不是KeyAvailable:http://msdn.microsoft.com/en-us/library/471w8d85.aspx。ReadKey方法会等待,也就是说,在调用ReadKey方法的线程上阻塞,直到按下一个字符或功能键。 - Robert Harvey
感谢大家的评论。我看了一下ReadKey。我觉得那可能是我需要的东西,但它被描述为一个属性,而我还没有接触属性部分。目前我可以先用ReadLine。 - Jimmy
ReadKey有与之相关的属性,但它们对您的目的不重要。ReadKey是一种方法; 只需将其替换为您现在拥有的Read()即可。 - Robert Harvey

2
您需要使用Console.ReadKey()而不是Console.Read()。

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