鱼C论坛

 找回密码
 立即注册
查看: 1794|回复: 3

新手课后作业求助

[复制链接]
发表于 2023-3-29 22:37:06 | 显示全部楼层 |阅读模式

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

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

x
请教一下这个代码错在那里了,为啥它会多算一次我输入的值呢,而且我发现把b=scanf和sum=a +sum那段代码换个位置,就能正常编译,这是为什么

QQ图片20230329223215.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-3-30 10:09:25 | 显示全部楼层
输入A的时候scanf读取失败,没有对a进行赋值,但是a在上一次循环已经被赋值为4了,所以后面sum=sum+a的时候相当于4+4了,看起来就像是加了两次值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-1 16:12:05 | 显示全部楼层
本帖最后由 myd0311 于 2023-4-1 16:13 编辑

一个有效的改法:
#include <stdio.h>

int main() {
        double a = 0, sum = 0;
        int b = 1;
        do {
                
                sum += a;
                
                printf("输入一个数字:");
                
                b = scanf("%lf", &a);
                
        } while (b == 1);
        printf("结果是:%lf", sum);
        return 0;
}

A 不是数字,所以读入失败,返回 -1,但 scanf 没有操作 a 的值,a 还是原来的 a,也就是 4,所以,你应该先判断,再 sum += a
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-1 17:41:20 | 显示全部楼层
代码未调换顺序前:
第一次执行do语句:
4(a) + 0(sum) = 4(sum)
因为输入的数字是4,b的值等于1;
故再一次执行do语句:
(A不是数字,故a仍等于4,但现在b等于-1)
4(a) + 4(sum) = 8(sum);
b等于-1,跳出循环,最终sum等于8。

代码调换顺序后:
第一次执行do语句:
0(a) + 0(sum) = 0(sum)
接着a才被赋值为4;
b值为1,第二次执行do语句:
4(a) + 0(sum) = 4(sum)
接着a被赋值为A(不合法数字),故b值为-1,循环结束,sum值为4

都是两次执行do语句,只是调换代码顺序前是先给a赋值再求和,调换代码顺序后就变成了先求和再给a赋值
(本人水平暂低,有可能理解错了)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-25 09:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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