鱼C论坛

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

s1e15求解

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

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

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

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

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

使用道具 举报

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

int main()
{
        float t;
        float s;
        int ln=scanf("%f%f",&t,&s);
        printf("输入数据是%f ---%f  函数返回长度是%d\n",t,s,ln);
        int lns=scanf("%f",&t);
        printf("输入数据是%f 函数返回长度是%d\n",t,lns);
        return 0;   
}
/*
        PS D:\我> ./wp4
                1.2  1.56789
                输入数据是1.200000 ---1.567890  函数返回长度是2
                1.258
                输入数据是1.258000 函数返回长度是1
*/
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

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

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

int main()
{
        int ch;

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

        return 0;
}
我大概知道(scanf("%d", &ch) == 1 && ch >= 0)的原理
只是不知道为什么输入1.2之类的数scanf的返回值不是1?那返回值是多少呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

抱歉,菜鸟新人,看不懂......
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

int main()
{
    int ch;

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

    return 0;
}

输入输出
1.2
        ch: 1
请先自己分析一下为什么是这个输出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

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

使用道具 举报

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

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

使用道具 举报

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

所以了,我给他演示浮点数如何提取,它说看不懂,没办法,只能闪人
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

^_^
想知道小甲鱼最近在做啥?请访问 -> 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 的要求
所以退出循环,是吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

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

使用道具 举报

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

大佬,对萌新手下留情啊.....
刚学没几天,真的看不懂啊......
没有听过浮点数的提取......
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

感谢
最佳答案要设哪一条啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

你随意,^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-8 04:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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