为什么while循环中的scanf可以工作?

为什么while循环中的scanf可以工作?,c,while-loop,scanf,C,While Loop,Scanf,我不明白为什么这正是我想要的。我在循环中使用两个scanf的部分让我感到困惑。我用devcpp编译了它 #include <stdio.h> #include <stdlib.h> int main() { int dend, dsor, q, r; char c; while(c!='n') { printf("enter dividend: "); scanf("%d", &dend);

我不明白为什么这正是我想要的。我在循环中使用两个scanf的部分让我感到困惑。我用devcpp编译了它

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int dend, dsor, q, r;
    char c;
    while(c!='n')
    {
        printf("enter dividend: ");
        scanf("%d", &dend);
        printf("enter divisor: ");
        scanf("%d", &dsor);
        q=dend/dsor;
        r=dend%dsor;
        printf("quotient is %d\n", q);
        printf("remainder is %d\n", r);
        scanf("%c", &c);
        printf("continue? (y/n)\n");
        scanf("%c", &c);
    }
    system("PAUSE");
    return 0;
}
#包括
#包括
int main()
{
国际数据、数据或统计、q、r;
字符c;
而(c!='n')
{
printf(“输入股息:”);
scanf(“%d”和&dend);
printf(“输入除数:”);
scanf(“%d”和&dsor);
q=dend/dsor;
r=密度%dsor;
printf(“商为%d\n”,q);
printf(“余数为%d\n”,r);
scanf(“%c”、&c);
printf(“继续?(是/否)\n”);
scanf(“%c”、&c);
}
系统(“暂停”);
返回0;
}
FWIW,您的代码将调用。部分

char c;
while(c!='n')
c
是一个具有自动存储功能的未初始化局部变量,您试图在不确定时使用
c
的值


也就是说,首先
scanf(“%c”&c)
用于在上一次输入后按enter键消耗输入缓冲区中的换行符

哪里是
do…while
?这不是“解释我的代码”网站。你有什么问题?你读过函数的man页面吗?想想在你完成第二个数字之后,在输入流中留下的尾行发生了什么。一个调试器和一些单步操作在这里可能会有很大的帮助。相关:这个解决方案(以及成百上千个类似的解决方案)工作的原因是为了避免您在这里遇到的脆弱的解决方案。例如,在输入第二个数字时,添加一个空格,然后在键盘上按enter键,看看会发生什么在“继续”提示后调用。前导空格读取换行符和前导空格等。您应该检查每一个
scanf()
,以确保成功转换的值的数量正确(
if(scanf(…)==1)
在每种情况下在该代码中都是正确的,但您应该检查预期的值数量)。