C 嵌套开关:为什么第二个开关命令不接受输入?
我是c语言编程新手,在我完成c语言课程的作业时,我遇到了一个问题C 嵌套开关:为什么第二个开关命令不接受输入?,c,nested,switch-statement,dev-c++,C,Nested,Switch Statement,Dev C++,我是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);
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下的命令)在编译和运行控制台应用程序时不起作用
我检查了所有的中断;命令,他们都在那里?我有什么遗漏/做错了吗
我试着阅读其他关于嵌套开关的类似问题,但是,我没有找到一个能解决我的问题
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;
}
我在多次打印后使用系统(“pasue>nul”),这是否有助于找到答案?(另外,我正在使用dev-c++,因为它是我们教授建议我们使用的应用程序)
我希望有人能找到我编错的代码;;提前非常感谢!:) 您可能键入了类似于“ad”的内容,导致您的第二个
scanf
读取回车键。如果编写代码来读取字符,则必须输入字符。如果要输入行,请编写代码以读取行。到scanf
的%c
格式说明符将匹配任何字符,包括换行符。在第一个scanf
之后,您输入的字符将放置在one
中,并在输入缓冲区中保留一个换行符。下一个scanf
将拾取保留在缓冲区中的换行符,结果不会提示您输入任何内容
这就是为什么添加额外的scanf
似乎可以解决您的问题
使用%c
时,应在模式中的空格前加空格。空格将匹配并丢弃任何换行符
因此,改变这些:
scanf ("%c", &one);
...
scanf ("%c", &ona);
...
scanf ("%c", &onb);
对这些:
scanf (" %c", &one);
...
scanf (" %c", &ona);
...
scanf (" %c", &onb);
检查scanf的返回值也很重要,以确保模式的预期数量匹配,并在不匹配的情况下进行错误处理。什么是“不工作”意思?问题不在于您的代码,而在于您的输入。使用“ad”进行测试(例如),它会工作。好吧,当我运行程序并到达开关(ona)应该工作的部分时,它不会工作,它直接进入代码的最后一部分>printf(“\n\n”);(…)返回0;}:(“我的代码不起作用”不是一个具体的问题陈述。请接受并学习。啊,我很抱歉!到时候我会编辑标题,谢谢你让我知道!@Olaf:)你好!很抱歉打扰您,但是在输入“a”之后,我如何才能避免输入“a”,因为我编码的开关在我输入“a”之后不会自动执行?非常感谢!!:)@fujisaki编写的代码可以满足您的实际需要。如果要读取行,则编写读取行的代码。或者,您应该编写一个函数来读取字符,但忽略换行符。编码你想要的。我在
scanf(“%c”和&ona)之前添加了另一个scanf
代码>和开关(ona)
终于运行了!也许有更好的方法来解决我的问题,哈哈,非常感谢你的回答!!我非常感激!!