C:scanf()在循环中

C:scanf()在循环中,c,loops,scanf,C,Loops,Scanf,这个程序似乎不会在while循环的每次迭代中都接受输入,而理想情况下它应该接受。但是,当我用%d(即整数输入而不是字符输入)替换scanf()函数的%c参数时,它似乎工作得非常好,while循环的每次迭代都接受该输入。为什么我会看到这种差异 int main() { char grade; int i=0; while(i<10){ printf("Enter ur grade\n"); scanf("%c", &grade

这个程序似乎不会在while循环的每次迭代中都接受输入,而理想情况下它应该接受。但是,当我用%d(即整数输入而不是字符输入)替换scanf()函数的%c参数时,它似乎工作得非常好,while循环的每次迭代都接受该输入。为什么我会看到这种差异

int main()
{
    char grade;
    int i=0;

    while(i<10){
        printf("Enter ur grade\n");
        scanf("%c", &grade);
        switch(grade){
            case 'A' : printf("U R THE BEST\n");
                       break;
            case 'B' : printf("U R VERY GOOD DUDE...\n");
                       break;
            case 'C' : printf("U R GOOD DUDE...\n");
                       break;
            case 'D' : printf("U R Not good DUDE...\n");
                       break;
            case 'E' : printf("U R WORST DUDE...\n");
                       break;
            default  : printf("U r AWESOME...\n");
                       break;
        }
    i++;
}
intmain()
{
煤焦品位;
int i=0;

而(i在
scanf
%c
之前添加空格。这样做是为了在扫描字符之前删除
stdin
中的所有空格。
scanf
不接受
\n
(回车键)输入一个字符并将其留在缓冲区中,当再次调用
scanf
时,缓冲区将使用该字符


另一件事:你忘了在代码中放一个
}

试试这个:在
%c
前面放一个空格,因为它也存储
\n

 scanf(" %c", &grade);

你能举一个输入和输出的例子吗?scanf不会从输入缓冲区中删除换行符。很多重复都是这样的:(不是真正的重复,而是问题的解决方案)每次你输入一个字符(实际上输入了两个字符),就有一个换行符(
\n
)输入流中留下的字符,将在下一次迭代中使用。您需要使用
getchar()
或类似技术清除它。添加fflush(stdin);扫描后大括号不平衡。for(int i=0;i<10;++i)
也有什么问题吗?