while ((c = getchar()) != '4') {
switch (c) {
case '1':
printf("You pressed 1");
break;
case '2':
printf("You pressed 2");
break;
case '3':
printf("You pressed 3");
break;
case '4':
break;
default:
printf("%c Wrong input, try again\n", c);
printMenu();
}
}
return 0;
}
好的,所以我不明白为什么默认总是执行。当我按下1-3时它会在那种情况下打印按摩,并在它执行默认情况后立即打印。代码有什么问题?答案 0 :(得分:7)
如果您在控制台输入字符,那么您可能在输入后按Enter键。这将在getchar
中显示为\n
个字符,不会出现在您的switch
个案例中。
您只需选择添加case '\n': break;
即可忽略此情况。
答案 1 :(得分:2)
从联系手册:
fgetc(), getc() and getchar() return the character read as an unsigned char cast to an int or EOF on end of file or error.
我会尝试将该字符打印为char
和int
,以查看正在进行的操作。
while ((c = getchar()) != '4') {
+ printf( "c = %c (%d)\n", (char) c, c );
switch (c) {
通常,这足以理解和解决问题: - )
答案 2 :(得分:1)
我认为问题在于那些中断不会破坏while循环,只会破坏交换机。您可能输入1和enter
,因此新行将被读取为getchar中的第二个字符。
答案 3 :(得分:1)
当您使用scanf阅读角色时 - 您将输入y并按。 y将被分配给选项(即选项 - Y)并将在缓冲区中。当您调用scanf时,缓冲区中的下一个时间将被分配给选项,因此转到默认情况。为了避免这种情况,请在scanf中的%c之前留一个空格。在整数或浮点数的情况下不会发生这种情况。
使用以下代码获得预期结果:
while ((c = getchar()) != '4') {
getchar();
switch (c) {
case '1':
printf("You pressed 1\n");
break;
case '2':
printf("You pressed 2\n");
break;
case '3':
printf("You pressed 3\n");
break;
case '4':
break;
default:
printf("%c Wrong input, try again\n", c);
//printMenu();
}
答案 4 :(得分:-6)
将默认值添加到默认值。多数民众赞成在哪里。