1

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

læn = Console.ReadLine()正在跳过第 31 行。这会导致.Parse在线 32 引发错误。

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;
    }
}
4

2 回答 2

7

来自Console.Read各州的文件:

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

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

由于您的下一条语句是Console.ReadLine()并且流中仍有一行结束等待读取(因为您点击了Enter,但只处理了按下的键),因此“吃掉”了该语句。

考虑Console.ReadKey()改用。

于 2014-11-17T12:27:27.603 回答
1

只是为了在 Patrick 所说的内容中添加一些内容,我建议您将其替换Console.Read()为:

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

另请注意,您分配时的所有括号tekst都不是必需的,以及每个switch's中的括号case

于 2014-11-17T12:32:33.720 回答