While循环第二次忽略scanf #包括 int main() { char-loop='y'; while(循环!=“n”){ printf(“循环?”); scanf(“%c”、&loop); 如果(循环!=“y”){ loop='n'; } } 返回0; }
如果我输入“y”,他将重新启动while循环,但第二次忽略scanf,然后结束循环。有人能帮忙吗?确保While循环第二次忽略scanf #包括 int main() { char-loop='y'; while(循环!=“n”){ printf(“循环?”); scanf(“%c”、&loop); 如果(循环!=“y”){ loop='n'; } } 返回0; },c,while-loop,scanf,C,While Loop,Scanf,如果我输入“y”,他将重新启动while循环,但第二次忽略scanf,然后结束循环。有人能帮忙吗?确保scanf丢弃换行符。将其更改为: #include <stdio.h> int main () { char loop='y'; while(loop != 'n') { printf("loop? "); scanf("%c", &loop); if(loop != 'y') { l
scanf
丢弃换行符。将其更改为:
#include <stdio.h>
int main ()
{
char loop='y';
while(loop != 'n') {
printf("loop? ");
scanf("%c", &loop);
if(loop != 'y') {
loop='n';
}
}
return 0;
}
您可能必须输入一个换行符,以便输入到您的程序中,对吗?循环第二次执行时,它将读取“等待”读取的换行符,并自动退出循环(
'\n'!='y'
)。您可以使用以下格式字符串使scanf忽略空白:
scanf(" %c", &loop);
^
一种解决方案是在
scanf()
语句之后使用fflush(stdin)
来清除输入缓冲区。@user1069968使scanf
忽略所有空格(包括换行符)。查看本文:可能重复的fflush(stdin)的可能重复
在C编程中具有未定义的行为。它可能在某些系统上按预期工作,但总体上不是好的做法。@NisseEngström谢谢Nisse,我同意你的观点。这不是一个好的实践,正如我们在这里看到的一样,fflush stdin也可以在linux上工作,但是避免使用它的UB,因为使用它会失去可移植性。谢谢你帮我女朋友省了作业!谢谢@AustinWitherow,我很高兴知道它对你有用:)
" %c"