2268194521 发表于 2018-10-31 23:11:30

s1e14

原谅我今天的题没做完就过来问问题了,题目描述:
1. 写一个程序,对用户输入的整数进行求和。当用户输入任意字符时,结束程序并打印结果。
小甲鱼的答案(看的一脸懵{:10_243:} )
#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 = 1while条件为真继续走
   
          sum = sum + 1为 1
          键入num = 2 (整数) status = 1while条件为真继续走

       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 知道问题 在哪,不知道明白没有不清楚 可以 再 联系

pheron 发表于 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 。之后就是前边所有数的和加上读取到的数值。

西瓜小刚 发表于 2018-11-1 10:10:45

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

嗨,你好昂 {:5_109:}   up 也可以 看看 这朋友的答案说的 也很清楚的

pheron 发表于 2018-11-1 11:30:05

西瓜小刚 发表于 2018-11-1 10:06
现指出错误 如下图    为什么 status == 1也在 图里 说啦

为什么 ①在②上面


'p'是什么类型的值在这里并不重要(我感觉这里楼主是想打'q'的),单引号已经把它给引用为ASCII数值了,重要的是前边的status由于赋的是scanf()的返回值,所以永远只有真和假,即0和1。

西瓜小刚 发表于 2018-11-1 11:55:30

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

嗯嗯 是滴 是滴

2268194521 发表于 2018-11-1 13:23:08

西瓜小刚 发表于 2018-10-31 23:11
现指出错误 如下图    为什么 status == 1也在 图里 说啦

为什么 ①在②上面


谢谢老师{:5_109:}讲的太好了;老师你太棒了!!!!么么哒~~~

2268194521 发表于 2018-11-1 13:24:48

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

status是scanf()的返回值所以只有 1或者0我懂了 谢谢老师

pheron 发表于 2018-11-1 14:41:49

2268194521 发表于 2018-11-1 13:24
status是scanf()的返回值所以只有 1或者0我懂了 谢谢老师

{:10_323:}
页: [1]
查看完整版本: s1e14