为什么while循环中的scanf可以工作?
我不明白为什么这正是我想要的。我在循环中使用两个scanf的部分让我感到困惑。我用devcpp编译了它为什么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);
#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)
在每种情况下在该代码中都是正确的,但您应该检查预期的值数量)。