鱼C论坛

 找回密码
 立即注册
查看: 1520|回复: 13

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

[复制链接]
发表于 2022-1-18 00:15:37 | 显示全部楼层 |阅读模式

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

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

x
for语句和循环嵌套课后作业没懂:
动动手第1题:
要求:
写一个程序,对用户输入的整数进行求和。当用户输入任意字符时,结束程序并打印结果。
程序实现如下:
最佳答案
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表示输入结束。
163255r1de8do5dmhmzz85.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-18 07:02:17 | 显示全部楼层
我都看懂了,不知道你哪没看懂?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

 楼主| 发表于 2022-1-18 13:31:18 | 显示全部楼层
jhq999 发表于 2022-1-18 07:02
我都看懂了,不知道你哪没看懂?

没看懂循环条件,循环条件是status==1,但是status=scanf("%d",&num);这里是我输入一个值赋值给num然后给status那如果我输入不是1怎么办循环就结束吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

输入不是数字的字符scanf的返回值就是0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-18 16:41:48 | 显示全部楼层
jhq999 发表于 2022-1-18 15:33
输入不是数字的字符scanf的返回值就是0

不是很懂如果我输入2的话循环条件是status==1,那么循环也是会结束的啊。是我scanf函数没看懂吗,不是数字的字符scanf的返回值是零。这句我没懂。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

输入2返回值是1,status==1为真继续循环,输入a,返回值是0,status==1为假,退出循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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表示输入结束。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-18 19:58:57 | 显示全部楼层

我明白了这里status = scanf("%d",&num);这里如果因为是%d输入整数形式就可以成功赋值,成功赋值一次status就等于1,如果输入字符或小数就赋值失败,没有成功赋值status就等于0,对不对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-19 16:41:53 | 显示全部楼层

老哥回个话啊老哥
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-19 17:02:12 | 显示全部楼层
摸你穷 发表于 2022-1-19 16:41
老哥回个话啊老哥

你不是已经理解了吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-19 22:32:07 | 显示全部楼层
jhq999 发表于 2022-1-19 17:02
你不是已经理解了吗?

追后问个问题skanf("%d",num)   如果输入字符或小数直接就不能赋值而不会对应ASCII码对吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

对,
强调一下小数
以上面转贴的例子为例
输入3.4
返回值是1,a=3,b未被赋值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-18 16:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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