鱼C论坛

 找回密码
 立即注册
查看: 335|回复: 1

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

[复制链接]
发表于 2024-1-15 11:23:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

代码如下:

  1. #include <stdio.h>

  2. int main()
  3. {
  4.         float num = 0;
  5.         double sum = 0;
  6.         int status;

  7.         do
  8.         {
  9.                 printf("请输入合法的数字:");
  10.                 do
  11.                 {
  12.                         sum = sum + num;
  13.                         status = scanf("%f", &num);
  14.                 } while (getchar() != '\n' && status == 1);
  15.         } while(status == 1);

  16.         printf("结果是:%.2lf\n", sum);

  17.         return 0;
  18. }
复制代码
最佳答案
2024-1-15 11:23:33
嵌套内的do-while语句中的判断语句是这样的:

  1. getchar() != '\n' && status == 1
复制代码


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

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

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

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

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

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

  1. sum = sum + num;
  2. status = scanf("%f", &num);
复制代码


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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-1-15 11:23:33 | 显示全部楼层    本楼为最佳答案   
嵌套内的do-while语句中的判断语句是这样的:

  1. getchar() != '\n' && status == 1
复制代码


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

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

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

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

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

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

  1. sum = sum + num;
  2. status = scanf("%f", &num);
复制代码


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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 11:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表