liyang0382 发表于 2023-11-8 14:54:57

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,想了很久不明白

Mike_python小 发表于 2023-11-8 14:56:28

【系统公告】2023/11/8 11:52 站长的openai账号被大量封禁,目前已不够支持服务,请各位稍安勿燥, 将尽快恢复服务

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}

isdkz 发表于 2023-11-8 14:56:30

这个问题是由于代码中的两行语句的顺序导致的。

在第二个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的值是正确的。

liyang0382 发表于 2023-11-8 16:05:41

isdkz 发表于 2023-11-8 14:56
这个问题是由于代码中的两行语句的顺序导致的。

在第二个do...while循环中,首先执行的是 status = scan ...

do
                {
                        sum = sum + num;
                        status = scanf("%f", &num);
                } while (getchar() != '\n' && status == 1);
这里是先执行status吗?

liyang0382 发表于 2023-11-8 16:23:37

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]
查看完整版本: s1e14课后作业求助