当我输入0时,程序结束。但if语句中有getchar()
并且它不起作用,你能帮助我吗?
在案例0中,我希望它从用户获取char。如果输入'N'
或'n'
,程序将结束,但如果不是,程序将重新开始。 (来自sec1)。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n;
sec1:
printf("Select a number between 4 and 0: ");
scanf("%d[\n]", &n);
switch(n)
{
case 0:
puts("Are you sure?");
puts("Yes(Y) or No(N)");
if(getchar() == 'N') goto sec1;
break;
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
default:
puts("Only numbers between 4 and 1 are accepted!");
goto sec1;
break;
}
system("pause");
return 0;
}
工作一次
int main()
{
int n, c;
sec1:
printf("Select a number between 4 and 0: ");
scanf("%d/n", &n);
switch(n)
{
case 0:
puts("Are you sure?");
puts("Yes(Y) or No(N)");
fflush(stdin);
if (getchar() == 'N') goto sec1;
break;
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
default:
puts("Only numbers between 4 and 1 are accepted!");
goto sec1;
break;
}
system("pause");
return 0;
}
答案 0 :(得分:1)
更改
scanf("%d[\n]",&n);
到
scanf("%d\n",&n);
原始代码不起作用的原因是因为scanf想要读取整数,“[”,“\ n”和“]”。因此,当您输入一个整数后跟“\ n”时,scanf只接受整数(因为它希望看到“[”)。然后getchar将简单地取剩下的“\ n”。这就是你的getchar()似乎不起作用的原因。
希望它对你有所帮助!
答案 1 :(得分:0)
当您读取“N”或“n”时,输入缓冲区中可能有一些符号。您需要在新读取之前刷新输入缓冲区。有关详细信息,请参阅this question。
简单地写一下:
while (getchar() != '\n') {}
在scanf(...)
之后。
答案 2 :(得分:0)
我猜这是处于熟化模式的终端,因此当用户通过点击返回完成一行时,只将类型字符输入到程序中。您可以通过从管道输入输入而不是从终端交互式输入来测试它。