我的代码:
#include <stdio.h>
int main(void){
char input;
while(1){
printf("Repeat? [Y/N] ");
scanf("%c", &input);
if(input=='N' || input=='n'){
break;
}
}
return 0;
}
预期产出:
Repeat? [Y/N] y
Repeat? [Y/N] y
Repeat? [Y/N] n //Program terminated
输出:
Repeat? [Y/N] Repeat? [Y/N] y
Repeat? [Y/N] Repeat? [Y/N] y
Repeat? [Y/N] Repeat? [Y/N] n //Program terminated
答案 0 :(得分:4)
scanf
正在读取输入缓冲区中遗留的\n
个字符(按 Enter 键)。只需将您的scanf
替换为
scanf(" %c", &input);
// ^A space before %c can skip any number of white-spaces
答案 1 :(得分:1)
更改
scanf("%c", &input);
到
scanf(" %c", &input); //Note the space before %c
当程序提示您输入字符时,输入字符并按 Enter 键(\n
)。scanf
读取您拥有的字符在输入流(\n
)中输入并保留换行符(stdin
)。因此,下次调用scanf
时,它会看到\n
中存在的stdin
,因为它也是一个字符,scanf
会消耗它,因此,不等待输入。
%c
之前的空格指示scanf
在读取字符之前跳过所有空格,如换行符和空格。
答案 2 :(得分:1)
在您使用y / n后按Enter
时,您还会使用Enter
个字符。出于这个原因,你得到Repeat? [Y/N] Repeat? [Y/N]
如果您只需添加getchar();
行:::
int main(void){
char input;
while(1){
printf("Repeat? [Y/N] ");
scanf("%c", &input);
if(input=='N' || input=='n'){
break;
}
getchar(); // for taking enter
}
return 0;
}