c#不允许您在while循环中输入的问题

c#不允许您在while循环中输入的问题,c#,C#,嘿,有人能帮我吗。 显然我不能在while循环中输入。 这是错误代码 class part2 { static void Main(string[] args) { Console.WriteLine("enter Y / N"); char ch = (char)Console.Read(); while (ch == 'Y') { Console.WriteLine(

嘿,有人能帮我吗。 显然我不能在while循环中输入。 这是错误代码


class part2
{
    static void Main(string[] args)
    {
        Console.WriteLine("enter Y / N");
        char ch = (char)Console.Read();
        while (ch == 'Y')
        {
            Console.WriteLine("enter Length, Width and Height");
            double len = double.Parse(Console.ReadLine());
            double wid = double.Parse(Console.ReadLine());
            double hei = double.Parse(Console.ReadLine());
            Console.WriteLine("enter N / Y");
            ch = (char)Console.Read();
        }
    }
}

我相信问题是因为您使用了
Console.Read()
来捕获“Y”,但这并没有消耗您键入Y并按下return时剩余的回车/换行字符对。(您的输入实际上是“Y”-Console.Read()为您提供了Y,将

这意味着您下次调用Console.ReadLine()时,它会立即返回一个空字符串(因为它会立即在之前留下的缓冲区中找到CRLF),该字符串无法解析为双精度字符串

使用
Console.ReadLine()
将Y捕获到字符串变量而不是字符中,并将其与字符串“Y”,而不是字符“Y”进行比较

enter Y / N
Y
enter Length, Width and Height

Unhandled Exception: System.FormatException: Input string was not in a correct format.
   at System.Number.ParseDouble(String value, NumberStyles options, NumberFormatInfo numfmt)
   at System.Double.Parse(String s)
   at part2.Main(String[] args) in C:\Users\avi16\Desktop\Coding\files\c#\Targil2\Targil2\Program.cs:line 12
你说你必须使用字符,你可以这样做:

    string ch = Console.ReadLine();
    while (ch == "Y")
请注意,如果用户不输入任何内容(不键入Y,只需按return键),则会导致崩溃。为了防止出现这种情况,您需要检查
字符串s
.Length
是否为
>1


另一个技巧是使用Read()获取角色,然后调用ReadLine()来使用缓冲区中的其他内容:

    string s = Console.ReadLine();
    char ch = s[0]; //it takes the first char of the string
    while(ch == 'Y')

看看你的例外。它与循环无关。这与您的输入(您应该与我们共享)不可分解为双精度有关。(回答这个问题也很重要:您在程序中使用的是什么语言环境?)输入在代码
double len=double.Parse(Console.ReadLine())中您的问题是“输入字符串的格式不正确”。您输入了什么?显然,它不能被解析为
double
。我没有输入它刚刚弹出的任何内容。程序现在正在运行,谢谢,但示例中的一个条件是使用char variableOK,您仍然可以使用ReadLine,但可以从输入字符串中提取第一个字符-我将进行编辑您可以添加
Console.ReadLine()作为
while
循环中的第一行
double.TryParse()
是必需的(或老式的验证)。@Jimi谢谢-我想我们的想法是巧合。但是,
Console.ReadLine()
必须是循环中的第一行(不需要在循环外部),否则,下一次确认时,您将返回到第一行:)(因为OP确实希望在那里获得一个字符。因此,我还需要更改
while(char.ToUpper(ch.Equals('Y'))
char ch = (char)Console.Read();
Console.ReadLine(); //consume residual junk
while(...)