Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.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
While循环第二次忽略scanf #包括 int main() { char-loop='y'; while(循环!=“n”){ printf(“循环?”); scanf(“%c”、&loop); 如果(循环!=“y”){ loop='n'; } } 返回0; }_C_While Loop_Scanf - Fatal编程技术网

While循环第二次忽略scanf #包括 int main() { char-loop='y'; while(循环!=“n”){ printf(“循环?”); scanf(“%c”、&loop); 如果(循环!=“y”){ loop='n'; } } 返回0; }

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

如果我输入“y”,他将重新启动while循环,但第二次忽略scanf,然后结束循环。有人能帮忙吗?

确保
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"