鱼C论坛

 找回密码
 立即注册
查看: 1451|回复: 5

[已解决]求助:《带你学C带你飞》S1E14 动动手第1题

[复制链接]
发表于 2017-7-13 01:13:51 | 显示全部楼层 |阅读模式

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

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

x
小甲鱼老师的,《带你学C带你飞》S1E14 动动手第1题,题目是:

写一个程序,对用户输入的整数进行求和。当用户输入任意字符时,结束程序并打印结果。

小甲鱼的标准答案如下。我有两点想不太通的:
1. 为什么num要先付值为0(int num=0)?只int num;然后通过下面的scanf函数再得到值不行吗?
2. 为什么sum = sum + num 语句要在status=scanf("%d", &num)之前?而不是printf()后接scanf()再接sum=sum+num?

(实际上是必须要这样写代码才能正确执行。我有点想不过来。。。基础还不行。。。。。

#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;
}
最佳答案
2017-7-13 10:25:17
2017-07-13_102119.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-7-13 10:25:17 | 显示全部楼层    本楼为最佳答案   
2017-07-13_102119.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-13 13:11:08 | 显示全部楼层

非常感谢!终于搞明白了!我不是计算机专业,之前学的python,刚开始学c,感觉c比python难好多啊!!

但关于第2点。sum=sum+num要放在前面的原因,是因为在scanf()函数中输入错误类型时,里面的附加参数(这个例子子是num)还是会保留上一次成功输入返回的值(比如你图中的3),所以会再加一次到sum中。 而跟scanf()函数本身的返回值关系不大吧。实际上当输入错误时这里scanf的返回值是0,因为只有一个附加参数num.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-13 14:03:26 | 显示全部楼层
huiwenwu 发表于 2017-7-13 13:11
非常感谢!终于搞明白了!我不是计算机专业,之前学的python,刚开始学c,感觉c比python难好多啊!!

...

是的。返回成功的个数,不就是返回之前成功的值吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-13 14:25:03 | 显示全部楼层
ba21 发表于 2017-7-13 14:03
是的。返回成功的个数,不就是返回之前成功的值吗?

不是啊,我理解的“成功的个数”是指scanf()函数的返回值,在这个例子中,由于只有一个附加参数,所以只要输入错误,返回值就是0;
而“返回之前成功的值”是scanf函数里面的附加参数(这个例子是num),返回上一次成功的值,比如上次的输入是数字9,则这次就算字母a,num还是会返回9.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-13 20:05:18 | 显示全部楼层
huiwenwu 发表于 2017-7-13 14:25
不是啊,我理解的“成功的个数”是指scanf()函数的返回值,在这个例子中,由于只有一个附加参数,所以只 ...

scanf的返回值是返回值,成功返回1,失败返回0。
失败的话num保留上次成功时存入的数据。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-28 10:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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