switch case忽略Console.ReadLine()

时间:2014-11-17 12:23:40

标签: c# .net switch-statement console.readline

我正在用一些初学者c#帮助一个朋友,我们遇到了一个奇怪的问题。

第31行的læn = Console.ReadLine()被跳过。这会导致第32行的.Parse抛出错误。

如果我们在第一个之后再添加læn = Console.ReadLine(),它就会开始工作。

static void Main(string[] args)
{
    double areal, læn1, høj1 = 0;
    int figur;
    string tekst, læn, høj;

    tekst = ("Du skal nu vægle en figur.");
    tekst += ("\nTryk 1 for rektangel");
    tekst += ("\nTryk 2 for cirkel");
    tekst += ("\nTryk 3 for en retvinklet trekant");
    tekst += ("\nValg: ");
    Console.Write("{0}", tekst);
    figur = Console.Read();
    switch (figur)
    {
        case '1':
            {
                Console.WriteLine("Du har valgt en rektangel. \nHvad er længden: ");
                læn = Console.ReadLine(); //Line 31
                læn1 = double.Parse(læn); //Line 32

                Console.WriteLine("hvad er højden?");
                høj = Console.ReadLine();
                høj1 = double.Parse(høj);

                areal = læn1 * høj1;
                Console.WriteLine("\n{0} * {1} = {2}", læn, høj1, areal);

                Console.ReadKey();
            }
            break;

        default:
            Console.WriteLine("Du har ikke valgt 1,2 eller 3");
            Console.ReadKey();
            break;
    }
}

2 个答案:

答案 0 :(得分:7)

来自Console.Read的文件:

  

Read方法在您输入输入字符时阻止其返回;当您按下Enter键时,它会终止。

这意味着只有在您按下Enter时,它才会返回一个值,无论您写了多少。

由于您的下一个语句是Console.ReadLine(),并且流中仍有一行待定待读(因为您点击了Enter,但只处理了按下的键),'吃& #39;那句话。

请考虑使用Console.ReadKey()

答案 1 :(得分:1)

只是为帕特里克所说的内容添加内容,我建议您用{:1}替换Console.Read()

ConsoleKeyInfo figur = Console.ReadKey();
switch (figur.Key)
{
    case ConsoleKey.D1:

另请注意,分配tekst时所有这些括号,以及每个switch case内的括号。