鱼C论坛

 找回密码
 立即注册
查看: 1230|回复: 8

[已解决]s1e14

[复制链接]
发表于 2018-10-31 23:11:30 | 显示全部楼层 |阅读模式
1鱼币
原谅我今天的题没做完就过来问问题了,题目描述:
1. 写一个程序,对用户输入的整数进行求和。当用户输入任意字符时,结束程序并打印结果。
小甲鱼的答案(看的一脸懵
#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;
}



我做的
#include <stdio.h>

int main()
{
        int num = 0;
        long sum = 0L; // 0L表示类型为long的0
        int status;

        do
        {
                printf("请输入合法的数字:");
               
                status = scanf("%d", &num);
                sum = sum + num;
               
        } while(status == 'p');

        printf("结果是:%ld\n", sum);

        return 0;
}错的
1.不应该是遇到p跳出吗?那个1是啥 ?
2.为什么要把 sum = sum + num;写在 status = scanf("%d", &num);这个的后面?
最佳答案
2018-10-31 23:11:31
现指出错误 如下图    为什么 status == 1  也在 图里 说啦

为什么 ①在②上面
我们不妨 计算 1 和 2  的值   

①在②上面   :
先走   sum =  sum + num   为0
          键入num = 1 (整数)  status = 1  while条件为真  继续走
     
          sum = sum + 1  为 1
          键入num = 2 (整数) status = 1  while条件为真  继续走

         sum = sum + 1  为 3  
         键入  q(非整数)      status  = 0    whlie条件为假  循环结束
      
          sum  = 3

①在②下面
            先走   键入 num = 1(整数) status = 1  
             sum = sum + num 为1        while条件为真  继续走

             键入 num = 2 (整数 ) status = 1
             sum = sum + num 为 3        while条件为真  继续走

             键入 num = q(非整数 ) status = 0
             sum = sum + num 为 5 (num值之前赋值为2 键入q的时候 num值不变)        while条件为假  循环结束
          
            sum  = 5

        我说的可能有点啰嗦  尽可能想让up 知道问题 在哪  ,不知道明白没有  不清楚 可以 再 联系
163255r1de8do5dmhmzz85.png

最佳答案

查看完整内容

现指出错误 如下图 为什么 status == 1 也在 图里 说啦 为什么 ①在②上面 我们不妨 计算 1 和 2 的值 ①在②上面 : 先走 sum = sum + num 为0 键入num = 1 (整数) status = 1 while条件为真 继续走 sum = sum + 1 为 1 键入num = 2 (整数) status = 1 while条件为真 继续走 sum = sum + 1 为 3 键入 q(非整数) status = 0 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-10-31 23:11:31 | 显示全部楼层    本楼为最佳答案   
现指出错误 如下图    为什么 status == 1  也在 图里 说啦

为什么 ①在②上面
我们不妨 计算 1 和 2  的值   

①在②上面   :
先走   sum =  sum + num   为0
          键入num = 1 (整数)  status = 1  while条件为真  继续走
     
          sum = sum + 1  为 1
          键入num = 2 (整数) status = 1  while条件为真  继续走

         sum = sum + 1  为 3  
         键入  q(非整数)      status  = 0    whlie条件为假  循环结束
      
          sum  = 3

①在②下面
            先走   键入 num = 1(整数) status = 1  
             sum = sum + num 为1        while条件为真  继续走

             键入 num = 2 (整数 ) status = 1
             sum = sum + num 为 3        while条件为真  继续走

             键入 num = q(非整数 ) status = 0
             sum = sum + num 为 5 (num值之前赋值为2 键入q的时候 num值不变)        while条件为假  循环结束
          
            sum  = 5

        我说的可能有点啰嗦  尽可能想让up 知道问题 在哪  ,不知道明白没有  不清楚 可以 再 联系

加油

加油

努力

努力

评分

参与人数 1荣誉 +1 鱼币 +5 贡献 +3 收起 理由
KulobaY_xiao + 1 + 5 + 3 谢谢!讲解的非常仔细,一看就懂!

查看全部评分

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

使用道具 举报

发表于 2018-11-1 09:21:34 | 显示全部楼层
本帖最后由 pheron 于 2018-11-1 09:28 编辑

status = scanf("%d", &num);
这里status的值是scanf()函数的返回值,scanf()读取到数值则返回1,未读取到数值则返回0,所以永远不会返回'p',所以你的do...while 永远不会循环,输出只会是0。
小甲鱼的'q'跳出,这里只是为了表述简便,事实上任意一个字母都行,但是你觉得告诉用户“按q退出”简便,还是告诉用户“按任意大小写字母或者标点退出”比较方便?

第二个问题,因为要先通过scanf()读取到num的数值才能做加法运算呀。num读取到第一个数值,然后sum = 0 + num 。之后就是前边所有数的和加上读取到的数值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-1 10:10:45 | 显示全部楼层
pheron 发表于 2018-11-1 09:21
status = scanf("%d", &num);
这里status的值是scanf()函数的返回值,scanf()读取到数值则返回1,未读取到 ...

嗨,你好昂      up 也可以 看看 这朋友的答案  说的 也很清楚的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-1 11:30:05 | 显示全部楼层
西瓜小刚 发表于 2018-11-1 10:06
现指出错误 如下图    为什么 status == 1  也在 图里 说啦

为什么 ①在②上面

'p'是什么类型的值在这里并不重要(我感觉这里楼主是想打'q'的),单引号已经把它给引用为ASCII数值了,重要的是前边的status由于赋的是scanf()的返回值,所以永远只有真和假,即0和1。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-1 11:55:30 | 显示全部楼层
pheron 发表于 2018-11-1 11:30
'p'是什么类型的值在这里并不重要(我感觉这里楼主是想打'q'的),单引号已经把它给引用为ASCII数值了, ...

嗯嗯 是滴 是滴
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-11-1 13:23:08 | 显示全部楼层
西瓜小刚 发表于 2018-10-31 23:11
现指出错误 如下图    为什么 status == 1  也在 图里 说啦

为什么 ①在②上面

谢谢老师讲的太好了;老师你太棒了!!!!么么哒~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-11-1 13:24:48 | 显示全部楼层
pheron 发表于 2018-11-1 09:21
status = scanf("%d", &num);
这里status的值是scanf()函数的返回值,scanf()读取到数值则返回1,未读取到 ...

status是scanf()的返回值所以只有 1或者0我懂了 谢谢老师
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-1 14:41:49 | 显示全部楼层
2268194521 发表于 2018-11-1 13:24
status是scanf()的返回值所以只有 1或者0我懂了 谢谢老师

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 20:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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