鱼C论坛

 找回密码
 立即注册
查看: 3936|回复: 15

s1e15求解

[复制链接]
发表于 2021-8-13 16:24:02 | 显示全部楼层 |阅读模式
5鱼币
大佬,求解!
为什么输入非自然数,比如1.2,scanf的返回值不是1?如果输入1.2,scanf的返回值是几呢?

怎么理解下面这段话?
scanf的函数快查:
返回值:
如果函数调用成功,返回值是成功获取并填充到附加参数中的个数。

如果函数调用失败,返回值小于附加参数的个数(甚至是 0)。

如果读取到标准输入流的结尾处,则返回 EOF。

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-8-13 16:41:25 | 显示全部楼层
  1. #include <stdio.h>
  2. #include <conio.h>

  3. int main()
  4. {
  5.         float t;
  6.         float s;
  7.         int ln=scanf("%f%f",&t,&s);
  8.         printf("输入数据是%f ---%f  函数返回长度是%d\n",t,s,ln);
  9.         int lns=scanf("%f",&t);
  10.         printf("输入数据是%f 函数返回长度是%d\n",t,lns);
  11.         return 0;   
  12. }
  13. /*
  14.         PS D:\我> ./wp4
  15.                 1.2  1.56789
  16.                 输入数据是1.200000 ---1.567890  函数返回长度是2
  17.                 1.258
  18.                 输入数据是1.258000 函数返回长度是1
  19. */
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-8-13 16:41:45 | 显示全部楼层
直接把问题和代码贴出来不好么?
你的这个问题一点也不方便解答,因为还需要去找你这个问题的题目和代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-8-13 16:57:08 | 显示全部楼层
人造人 发表于 2021-8-13 16:41
直接把问题和代码贴出来不好么?
你的这个问题一点也不方便解答,因为还需要去找你这个问题的题目和代码

啊,这样
原题目是:请问下边程序输入什么值才能正常退出?
代码:
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         int ch;

  5.         while (scanf("%d", &ch) == 1 && ch >= 0)
  6.                 ;

  7.         return 0;
  8. }
复制代码

我大概知道(scanf("%d", &ch) == 1 && ch >= 0)的原理
只是不知道为什么输入1.2之类的数scanf的返回值不是1?那返回值是多少呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-8-13 16:58:48 | 显示全部楼层

抱歉,菜鸟新人,看不懂......
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-8-13 17:02:40 | 显示全部楼层
河岸柳 发表于 2021-8-13 16:57
啊,这样
原题目是:请问下边程序输入什么值才能正常退出?
代码:
  1. #include <stdio.h>

  2. int main()
  3. {
  4.     int ch;

  5.     while (scanf("%d", &ch) == 1 && ch >= 0)
  6.         printf("\tch: %d\n", ch);

  7.     return 0;
  8. }
复制代码


输入输出
  1. 1.2
  2.         ch: 1
复制代码

请先自己分析一下为什么是这个输出
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-8-13 17:55:04 | 显示全部楼层
人造人 发表于 2021-8-13 17:02
输入输出

请先自己分析一下为什么是这个输出

因为int?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-8-13 18:13:06 | 显示全部楼层

我不知道你在说什么
输入 1.23
第一次 获取到 1
第二次 获取的时候失败了,因为 1 已经读取了,1 后面的 。(点)无法读取,因为是 %d 格式
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-8-13 18:39:58 From FishC Mobile | 显示全部楼层
人造人 发表于 2021-8-13 18:13
我不知道你在说什么
输入 1.23
第一次 获取到 1

所以了,我给他演示浮点数如何提取,它说看不懂,没办法,只能闪人
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-8-13 18:47:31 | 显示全部楼层
wp231957 发表于 2021-8-13 18:39
所以了,我给他演示浮点数如何提取,它说看不懂,没办法,只能闪人

^_^
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-8-13 22:20:24 | 显示全部楼层
人造人 发表于 2021-8-13 18:13
我不知道你在说什么
输入 1.23
第一次 获取到 1


我知道是因为int是整形数据,所以对于1.2只获取1......
我也试过把int改成float或double,把%d改成%lf去实验一下.......然后得出奇奇怪怪的结论,所以才来求助一下

额,我猜测一下,是因为int是整形数据,所以输入1.2,而1.2不是整数
所以按照scanf的返回值规定(如果函数调用失败,返回值小于附加参数的个数(甚至是 0))
scanf的返回值为0而不为1,不符合 scanf("%d", &ch) == 1 && ch >= 0 的要求
所以退出循环,是吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-8-13 22:24:40 | 显示全部楼层
河岸柳 发表于 2021-8-13 22:20

我知道是因为int是整形数据,所以对于1.2只获取1......
我也试过把int改成float或double ...

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-8-13 22:25:12 | 显示全部楼层
wp231957 发表于 2021-8-13 18:39
所以了,我给他演示浮点数如何提取,它说看不懂,没办法,只能闪人

大佬,对萌新手下留情啊.....
刚学没几天,真的看不懂啊......
没有听过浮点数的提取......
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-8-13 22:36:20 | 显示全部楼层

感谢
最佳答案要设哪一条啊?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-8-13 22:44:10 | 显示全部楼层
河岸柳 发表于 2021-8-13 22:36
感谢
最佳答案要设哪一条啊?

你随意,^_^
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-8-18 16:01:32 | 显示全部楼层
河岸柳 发表于 2021-8-13 22:36
感谢
最佳答案要设哪一条啊?

随便你咯
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-25 07:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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