为什么将while后面括号里的status==1删除之后程序变成了死循环
#include <stdio.h>int main()
{
float num = 0;
double sum = 0;
int status;
do
{
printf("请输入合法的数字:");
do
{
sum = sum + num;
status = scanf("%f", &num);
} while (getchar() != '\n'&&status==1);
} while(status == 1);
printf("结果是:%.2lf\n", sum);
return 0;
} 我感觉好像可以删去的把{:10_255:} 你这里是两层循环啊,status还控制着外层循环的进行,也就是是否在让用户输入。
删掉的话,外层肯定是死循环了。 TyCk 发表于 2018-7-21 19:04
你这里是两层循环啊,status还控制着外层循环的进行,也就是是否在让用户输入。
删掉的话,外层肯定是死循 ...
emmmmm,这个status的值不是由上面的scanf函数控制的吗,我测试下来好像是里面那个循环在输入非法数字时跳不出来呢{:10_255:} 向上的蜗牛 发表于 2018-7-21 20:26
emmmmm,这个status的值不是由上面的scanf函数控制的吗,我测试下来好像是里面那个循环在输入非法数字时 ...
嗯,我在codeblocks里测试了下,结果输出为0,要把sum改成float类型,输出的%.2f,又加了两句getchar()才显示出结果来,不知为啥。
跳出来的话,用个英文字母就可以。
status由scanf控制,读取到非数字的时候,就不等于1了,两层循环就都跳出来了。
哦,你这么说,意思或许是把请输入合法数字那行放到第二个do里,外层循环就不需要了,但是事实是,当你输入类似于“5.4 4.3 5 5”的时候,它会循环读取,也就是先读取到5.4,然后判断空格不等于回车,继续读取4.3,依次下去,当读取结束,getchar为回车,status等于1,内层循环结束,外层循环继续,要求用户继续输入合法数字,这样说的话,你应该就明白了。
另外,建议你去看下scanf函数的详解,论坛里有的。 TyCk 发表于 2018-7-21 21:59
嗯,我在codeblocks里测试了下,结果输出为0,要把sum改成float类型,输出的%.2f,又加了两句getchar()才 ...
我好像说错了,我是想着把与运算符后面的那个去了的{:10_247:} 向上的蜗牛 发表于 2018-7-22 14:33
我好像说错了,我是想着把与运算符后面的那个去了的
所以呢,我上面那段话,解释清楚没有,你有没有理解?{:10_312:} TyCk 发表于 2018-7-22 18:31
所以呢,我上面那段话,解释清楚没有,你有没有理解?
{:10_323:}
页:
[1]