嵌套开关:为什么第二个开关命令不接受输入?
nested switch : why does the second switch command not accept an input?
我是 C 语言编程的新手,在完成 C 语言课程的作业时,我遇到了一个问题...
int main() {
char one, ona, onb;
/*code for choices (a), (b), and (c) here*/
scanf ("%c", &one);
switch (one) {
case 'a':
/*code for choices (d), and (e) here*/
scanf ("%c", &ona);
switch (ona) {
case 'd':
printf ("end");
break;
case 'e':
printf ("continue");
break;
}
break;
case 'b':
/*code for case 'b' here*/
break;
case 'c':
/*code for case 'c' here*/
break;
}
system ("pause > nul");
getch ();
return 0;
}
我的嵌套开关命令(在 ona 和 onb 下的命令)在我编译时不起作用 & 运行 我的控制台应用程序?
我检查了所有休息时间;命令,它们都在那里?我有什么遗漏/做错了什么吗?
我曾尝试阅读有关嵌套开关的其他类似问题,但是,我还没有找到可以解决我的问题的问题...
我在多个 printf 语句之后使用系统 ("pasue > nul") 是否有助于找到答案? (另外,我正在使用 dev-c++,因为它是我们教授告诉我们使用的推荐应用程序)
我希望有人能找到我编码错误的地方;;非常感谢你提前! :)
您可能正在输入类似 "a <enter> d" 的内容,导致您的第二个 scanf
读取回车键。如果您编写代码来读取字符,则必须输入字符。如果要输入行,请编写代码以读取行。
scanf
的 %c
格式说明符将匹配任何字符,包括换行符。在第一个 scanf
之后,你输入的字符被放在 one
中,并在输入缓冲区中留下一个换行符。下一个 scanf
拾取留在缓冲区中的换行符,结果不会提示您输入任何内容。
这就是为什么添加额外的 scanf
似乎可以解决您的问题。
当使用%c
时,你应该在模式中的前面加上space。 space 将匹配并丢弃任何换行符。
所以改变这些:
scanf ("%c", &one);
...
scanf ("%c", &ona);
...
scanf ("%c", &onb);
致这些:
scanf (" %c", &one);
...
scanf (" %c", &ona);
...
scanf (" %c", &onb);
检查 scanf
的 return 值以确保匹配预期的模式数量也很重要,如果不是这种情况则进行错误处理。
我是 C 语言编程的新手,在完成 C 语言课程的作业时,我遇到了一个问题...
int main() {
char one, ona, onb;
/*code for choices (a), (b), and (c) here*/
scanf ("%c", &one);
switch (one) {
case 'a':
/*code for choices (d), and (e) here*/
scanf ("%c", &ona);
switch (ona) {
case 'd':
printf ("end");
break;
case 'e':
printf ("continue");
break;
}
break;
case 'b':
/*code for case 'b' here*/
break;
case 'c':
/*code for case 'c' here*/
break;
}
system ("pause > nul");
getch ();
return 0;
}
我的嵌套开关命令(在 ona 和 onb 下的命令)在我编译时不起作用 & 运行 我的控制台应用程序?
我检查了所有休息时间;命令,它们都在那里?我有什么遗漏/做错了什么吗?
我曾尝试阅读有关嵌套开关的其他类似问题,但是,我还没有找到可以解决我的问题的问题...
我在多个 printf 语句之后使用系统 ("pasue > nul") 是否有助于找到答案? (另外,我正在使用 dev-c++,因为它是我们教授告诉我们使用的推荐应用程序)
我希望有人能找到我编码错误的地方;;非常感谢你提前! :)
您可能正在输入类似 "a <enter> d" 的内容,导致您的第二个 scanf
读取回车键。如果您编写代码来读取字符,则必须输入字符。如果要输入行,请编写代码以读取行。
scanf
的 %c
格式说明符将匹配任何字符,包括换行符。在第一个 scanf
之后,你输入的字符被放在 one
中,并在输入缓冲区中留下一个换行符。下一个 scanf
拾取留在缓冲区中的换行符,结果不会提示您输入任何内容。
这就是为什么添加额外的 scanf
似乎可以解决您的问题。
当使用%c
时,你应该在模式中的前面加上space。 space 将匹配并丢弃任何换行符。
所以改变这些:
scanf ("%c", &one);
...
scanf ("%c", &ona);
...
scanf ("%c", &onb);
致这些:
scanf (" %c", &one);
...
scanf (" %c", &ona);
...
scanf (" %c", &onb);
检查 scanf
的 return 值以确保匹配预期的模式数量也很重要,如果不是这种情况则进行错误处理。