s1e14课后作业求助
代码如下:#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;
}
假如输入数字的是1 2 3 4
然后输入q退出
结果是10
但是将第二个do…while里面的sum = sum + num;
status = scanf("%f", &num);
这两句调换一下结果却是14,想了很久不明白 【系统公告】2023/11/8 11:52 站长的openai账号被大量封禁,目前已不够支持服务,请各位稍安勿燥, 将尽快恢复服务
球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:} 这个问题是由于代码中的两行语句的顺序导致的。
在第二个do...while循环中,首先执行的是 status = scanf("%f", &num); 语句,然后才会执行 sum = sum + num; 语句。
当你输入数字1时,首先会执行 status = scanf("%f", &num); 语句,将输入的数字1赋值给num,并将status设置为1(表示成功读取一个浮点数)。然后执行 sum = sum + num; 语句,将sum的值加上num的值,此时sum变为1。
当你输入数字2时,再次执行 status = scanf("%f", &num); 语句,将输入的数字2赋值给num,并将status设置为1。然后执行 sum = sum + num; 语句,将sum的值加上num的值,此时sum变为3。
以此类推,当你输入数字4时,sum的值变为10。
如果你将这两行语句的顺序调换,即先执行 sum = sum + num; 语句,再执行 status = scanf("%f", &num); 语句,那么结果会变为14。
因为当你输入数字1时,首先执行 sum = sum + num; 语句,将sum的值加上num的值,此时sum变为1。然后执行 status = scanf("%f", &num); 语句,将输入的数字2赋值给num,并将status设置为1。接着执行 sum = sum + num; 语句,将sum的值再加上num的值,此时sum变为3。
以此类推,当你输入数字4时,sum的值变为14。
所以,调换这两行语句的顺序会导致结果不同。正确的顺序是先执行 status = scanf("%f", &num); 语句,再执行 sum = sum + num; 语句,以保证sum的值是正确的。 isdkz 发表于 2023-11-8 14:56
这个问题是由于代码中的两行语句的顺序导致的。
在第二个do...while循环中,首先执行的是 status = scan ...
do
{
sum = sum + num;
status = scanf("%f", &num);
} while (getchar() != '\n' && status == 1);
这里是先执行status吗? do
{
sum = sum + num;
status = scanf("%f", &num);
} while (getchar() != '\n' && status == 1);为什么这样才能得出正确的结果
而这样却不行
do
{
status = scanf("%f", &num);
sum = sum + num;
} while (getchar() != '\n' && status == 1);
页:
[1]