摸你穷 发表于 2022-1-18 00:15:37

[课后作业] S1E14:for语句和循环嵌套

for语句和循环嵌套课后作业没懂:
动动手第1题:
要求:
写一个程序,对用户输入的整数进行求和。当用户输入任意字符时,结束程序并打印结果。
程序实现如下:

摸你穷 发表于 2022-1-18 00:17:38

我看了答案,但是我看了居然没看懂麻烦各位给我分析一下,程序如下:
#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;
}

jhq999 发表于 2022-1-18 07:02:17

我都看懂了,不知道你哪没看懂?

大马强 发表于 2022-1-18 08:45:55

#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);//scanf返回值是它按照格式符成功赋值的个数,现在是%d,只要输入的是整型都返回1,不是的话就返回0
      } while(status == 1);

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

      return 0;
}

摸你穷 发表于 2022-1-18 13:31:18

jhq999 发表于 2022-1-18 07:02
我都看懂了,不知道你哪没看懂?

没看懂循环条件,循环条件是status==1,但是status=scanf("%d",&num);这里是我输入一个值赋值给num然后给status那如果我输入不是1怎么办循环就结束吗?

jhq999 发表于 2022-1-18 15:33:39

摸你穷 发表于 2022-1-18 13:31
没看懂循环条件,循环条件是status==1,但是status=scanf("%d",&num);这里是我输入一个值赋值给num然后给 ...

输入不是数字的字符scanf的返回值就是0

摸你穷 发表于 2022-1-18 16:41:48

jhq999 发表于 2022-1-18 15:33
输入不是数字的字符scanf的返回值就是0

不是很懂如果我输入2的话循环条件是status==1,那么循环也是会结束的啊。是我scanf函数没看懂吗,不是数字的字符scanf的返回值是零。这句我没懂。

jhq999 发表于 2022-1-18 17:30:16

摸你穷 发表于 2022-1-18 16:41
不是很懂如果我输入2的话循环条件是status==1,那么循环也是会结束的啊。是我scanf函数没看懂吗,不是数 ...

输入2返回值是1,status==1为真继续循环,输入a,返回值是0,status==1为假,退出循环

jhq999 发表于 2022-1-18 17:33:12

摸你穷 发表于 2022-1-18 16:41
不是很懂如果我输入2的话循环条件是status==1,那么循环也是会结束的啊。是我scanf函数没看懂吗,不是数 ...

转贴
1. scanf 函数是有返回值的,它的返回值可以分成三种情况
1) 正整数,表示正确输入参数的个数。例如执行 scanf("%d %d", &a, &b);
      如果用户输入"3 4",可以正确输入,返回2(正确输入了两个变量);
      如果用户输入"3,4",可以正确输入a,无法输入b,返回1(正确输入了一个变量)。   
2) 0,表示用户的输入不匹配,无法正确输入任何值。如上例,用户如果输入",3 4",返回0。
3) EOF,这是在stdio.h里面定义的常量(通常值为-1),表示输入流已经结束。在Windows下,用户按下CTRL+Z(会看到一个^Z字符)再按下回车(可能需要重复2次),就表示输入结束;Linux/Unix下使用CTRL+D表示输入结束。

摸你穷 发表于 2022-1-18 19:58:57

jhq999 发表于 2022-1-18 17:33
转贴

我明白了这里status = scanf("%d",&num);这里如果因为是%d输入整数形式就可以成功赋值,成功赋值一次status就等于1,如果输入字符或小数就赋值失败,没有成功赋值status就等于0,对不对

摸你穷 发表于 2022-1-19 16:41:53

jhq999 发表于 2022-1-18 17:33
转贴

老哥回个话啊老哥{:10_269:}

jhq999 发表于 2022-1-19 17:02:12

摸你穷 发表于 2022-1-19 16:41
老哥回个话啊老哥

你不是已经理解了吗?

摸你穷 发表于 2022-1-19 22:32:07

jhq999 发表于 2022-1-19 17:02
你不是已经理解了吗?

追后问个问题skanf("%d",num)   如果输入字符或小数直接就不能赋值而不会对应ASCII码对吗

jhq999 发表于 2022-1-20 07:27:36

摸你穷 发表于 2022-1-19 22:32
追后问个问题skanf("%d",num)   如果输入字符或小数直接就不能赋值而不会对应ASCII码对吗

对,
强调一下小数
以上面转贴的例子为例
输入3.4
返回值是1,a=3,b未被赋值
页: [1]
查看完整版本: [课后作业] S1E14:for语句和循环嵌套