鱼C论坛

 找回密码
 立即注册
查看: 1238|回复: 4

s1e14课后作业求助

[复制链接]
发表于 2023-11-8 14:54:57 | 显示全部楼层 |阅读模式

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

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

x
代码如下:
#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,想了很久不明白
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-8 14:56:28 | 显示全部楼层
【系统公告】2023/11/8 11:52 站长的openai账号被大量封禁,目前已不够支持服务,请各位稍安勿燥, 将尽快恢复服务

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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的值是正确的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-8 16:05:41 From FishC Mobile | 显示全部楼层
isdkz 发表于 2023-11-8 14:56
这个问题是由于代码中的两行语句的顺序导致的。

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

do
                {
                        sum = sum + num;
                        status = scanf("%f", &num);
                } while (getchar() != '\n' && status == 1);
这里是先执行status吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-8 16:23:37 From FishC Mobile | 显示全部楼层
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);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 21:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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