Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 嵌套开关:为什么第二个开关命令不接受输入?_C_Nested_Switch Statement_Dev C++ - Fatal编程技术网

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);

我是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下的命令)在编译和运行控制台应用程序时不起作用

我检查了所有的中断;命令,他们都在那里?我有什么遗漏/做错了吗

我试着阅读其他关于嵌套开关的类似问题,但是,我没有找到一个能解决我的问题

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)
终于运行了!也许有更好的方法来解决我的问题,哈哈,非常感谢你的回答!!我非常感激!!