我只是在学习c#,在继续学习之前我喜欢理解一切。
我遇到的问题是我需要2台Console.ReadLine();暂停控制台。如果我只使用1,程序在输入后结束。那为什么它需要2个readline方法而不是?有任何想法吗?
请注意,在我的代码中,我已经注释掉了一条readline方法,我想让我的程序工作,但事实并非如此。但是删除注释可以让程序工作,但我不明白为什么。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CoinFlip
{
class Program
{
static void Main(string[] args)
{
Random rng = new Random();
Console.WriteLine(@"
This program will allow you to guess heads or tails on a coin flip.
Please enter h for heads, or t for tails and press Enter: ");
char userGuess = (char)Console.Read();
int coin = rng.Next(0,2);
Console.WriteLine("Coin is {0}\n\n", coin);
if (coin == 0 && (userGuess == 'h' || userGuess == 'H'))
{
Console.WriteLine("It's heads! You win!");
}
else if (coin == 1 && (userGuess == 't' || userGuess == 'T'))
{
Console.WriteLine("It's tails! You win!");
}
else if (userGuess != 't' && userGuess != 'T' && userGuess != 'h' && userGuess != 'H')
{
Console.WriteLine("You didn't enter a valid letter");
}
else
{
if (coin == 0) { Console.WriteLine("You lose mofo. The coin was heads!"); }
if (coin == 1) { Console.WriteLine("You lose mofo. The coin was tails!"); }
}
Console.ReadLine();
//Console.ReadLine();
}
}
}
答案 0 :(得分:4)
您正在使用Console.Read()
,在用户点击后会读取单个字符。但是,它只消耗那个单个字符 - 这意味着该行的其余部分(即使它是空的)仍在等待消耗...... Console.ReadLine()
正在进行。
最简单的解决方法是先前使用Console.ReadLine()
:
string userGuess = Console.ReadLine();
..然后可能会检查猜测是单个字符,还是只是将所有字符文字(例如't'
)更改为字符串文字(例如"t"
)。
(或者使用Console.ReadKey()
作为Servy的建议。这取决于您是否希望用户点击返回。)
答案 1 :(得分:3)
简短的回答,请勿使用Console.Read
。在提交一行文本之前它无法读取任何内容,但它只读取该行文本的第一个字符,剩下该行的其余部分用于进一步的控制台输入,例如调用Console.ReadLine
。使用Console.ReadKey
代替Console.Read
来阅读单个字符。
答案 2 :(得分:0)
第一个 Console.ReadLine()由 Enter 键使用,因此程序结束。
试试这个而不是 Console.Read()
var consoleKeyInfo = Console.ReadKey();
var userGuess = consoleKeyInfo.KeyChar;