我正在写一个非常愚蠢的程序。
我不知道为什么以下代码不起作用:
static void Main(string[] args){
<Some silly code>
Console.WriteLine("Please choose the lab you are working on:");
int choose = Console.Read();
<Some more silly code, including 1 Console.writeLine() call >
Console.WriteLine("Enter the DB server location");
string DBServer = Console.ReadLine();
Console.WriteLine("Enter the DB name");
string DBName = Console.ReadLine();
}
当我运行程序时,它永远不会等待第一个ReadLine语句
string DBServer = Console.ReadLine();
立即打印两行
Enter the DB server location
Enter the DB name
然后读取第二个ReadLine string DBName = Console.ReadLine();
当我检查输入表单用户时,它确实读取了第二个,但是第一个字符串是空的 有任何想法吗?
答案 0 :(得分:3)
这是因为你使用的Console.Read
会到达一个角色,但仅在它之后就会留下回车符。然后由ReadLine
提取。
输入是一个流。当您输入单个字符然后点击返回时,流中有2-3个字符(取决于系统):您输入的字符和换行符。 Read
只会为您提供流中的下一个字符,而ReadLine
会读取下一个换行符之前的所有内容。再次,从流。所以你的Read
获取一个字符,ReadLine已经找到了下一个换行符,因此继续愉快。
您可以插入虚拟ReadLine
,也可以使用ReadKey
只读取密钥,在程序看到输入之前不需要返回,或使用{{1}也适用于单字符输入。