顶聪明的芥子 发表于 2024-1-15 11:23:20

《带你学C带你飞》课程中S1E14作业题-动动手中的第二题

老师给的代码是这样的,我看不懂嵌套内的do-while语句的判断语句?
以及,它是如何处理同一行输入中的字符的??

代码如下:

#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;
}

FishC 发表于 2024-1-15 11:23:33

嵌套内的do-while语句中的判断语句是这样的:

getchar() != '\n' && status == 1

它的作用是在每次读取一个数字后,判断当前输入行是否结束。当我们使用`scanf()`函数读取一个浮点数后,按下回车键时,输入的字符中会包含一个换行符`\n`。因此,当读取完一个数字后,我们需要读取并丢弃输入流中的换行符,以便下一次循环能够正常执行。而`getchar()`函数可以读取并返回一个字符。

这个判断语句将两个条件通过逻辑与运算符`&&`连接起来:

1. `getchar() != '\n'`:判断当前读取的字符是否为换行符,即判断是否输入行结束;
2. `status == 1`:判断上一次`scanf()`函数是否成功读取了一个浮点数。

只有当这两个条件同时满足时,判断语句的结果为真,继续执行内层的do-while循环,否则跳出内层循环。

在处理同一行输入中的字符时,我们需要先读取一个浮点数,然后读取并丢弃输入流中的其他字符,包括换行符。这是因为输入流中可能存在多余的字符,如果不将其清空,那么下一次循环时这些多余的字符可能会被`scanf()`函数误读为一个新的浮点数,导致程序出现错误。

内层do-while循环中的语句:

sum = sum + num;
status = scanf("%f", &num);

首先将当前读取到的浮点数`num`加到`sum`上,然后使用`scanf()`函数再次读取一个浮点数,并将其赋值给`num`。这样,在内层循环的末尾,`num`中将存储着刚刚读取到的浮点数,而`sum`中存储着所有已经读取的浮点数的和。

希望这样解答能够帮到你!如果还有什么不清楚的地方,可以继续追问哦~

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 《带你学C带你飞》课程中S1E14作业题-动动手中的第二题