我正在用一些初学者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;
}
}
答案 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
内的括号。