rhyan 发表于 2023-6-4 21:18:17

新人求助!

#include <stdio.h>

int main()
{
      int num = 0;
      long sum = 0L; // 0L表示类型为long的0
      int status;

      do
      {
                printf("请输入合法的数字:");
                sum = sum + num;
                status = scanf("%d", &num);
      } while(status == 1);

      printf("结果是:%ld\n", sum);

      return 0;
}
sum=sum+num;和 status = scanf("%d", &num);交换顺序为什么不行捏? 还有就是sum+num时也没有说将输入的数赋值给num?

陶远航 发表于 2023-6-4 21:19:07

交换"sum = sum + num;"和"status = scanf("%d", &num);"的顺序会导致输入的第一个数字没有被加到sum中,因为在循环的第一次迭代时,num的值还未被读入,因此sum也不能累加它。另外, "status = scanf("%d", &num);"是从标准输入中读入一个整数,然后将其存储到变量num中。因此,"sum = sum + num;"语句相当于将输入的当前数字累加到总和中。

isdkz 发表于 2023-6-4 21:19:53

这是一个很好的问题,我先解释一下这段代码的基本逻辑:

这段代码的目的是从用户那里获取一系列整数,并将这些整数相加。 scanf("%d", &num)这行代码的功能是从用户那里读取一个整数并将其赋值给num 。然后, sum = sum + num这行代码将num加到sum上。

do...while循环的作用是:只要scanf成功读取一个整数,它就继续运行。如果scanf不能读取一个整数(例如,用户输入了非数字字符),它会返回一个非 1 的值,循环就会停止。

现在,对于你的问题:

1. 为什么sum = sum + num;和status = scanf("%d", &num);不能交换顺序?

   如果你交换了这两行代码,那么你将首先添加未初始化的num到sum ,然后才从用户那里获取新的num 。这意味着在第一次循环时,你将把一个未定义的值添加到sum ,这可能导致程序行为异常。在num从用户那里获取值之后,再执行sum = sum + num;是更合适的。

2.sum + num时没有明确地说将输入的数赋值给num ?

   这其实发生在status = scanf("%d", &num);这一行。 scanf函数从用户那里获取输入,并将输入的整数赋值给num 。然后, sum = sum + num;这一行把num的值加到sum上。

希望这个解释能帮助你理解这段代码的工作原理。如果你还有其他问题,欢迎随时提问!

liuhongrun2022 发表于 2023-6-4 21:20:04

在这段代码中,sum = sum + num; 的作用是计算已经输入数字的累加和,而 status = scanf("%d", &num); 的作用是读取下一个要累加的数字。这两行代码的先后顺序不能交换,否则会导致 sum 计算错误或者进入死循环。

如果将这两行代码的顺序交换,那么在输入第一个合法数字之前,num 没有被初始化,其值是不确定的。在 sum = sum + num; 这一行中,可能会导致 sum 的值被任意数加上,例如初始时 num 的值为负数,会抵消之后输入的正数,从而导致 sum 计算错误。

同时,scanf() 函数可以读取用户输入的数字,并将其赋值给变量 num。因此 sum = sum + num; 这一行代码在计算累加和时也就自动将输入的数字赋值给了 num,无需显式赋值。
页: [1]
查看完整版本: 新人求助!