鱼C论坛

 找回密码
 立即注册
查看: 1197|回复: 3

[已解决]S1E14中scanf返回值问题

[复制链接]
发表于 2020-2-12 16:13:39 | 显示全部楼层 |阅读模式

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

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

x
int a,b;
scanf("%d%d",&a,&b)
函数返回值为int型。如果a和b都被成功读入,那么scanf的返回值就是2;
如果只有a被成功读入,返回值为1;
如果a和b都未被成功读入,返回值为0;


以上是网上的解释
所以怎么才算成功读入,比如输入两个整型就算成功读入,如果输入字符型就不可以?
还有他上面的意思好像是说返回值为int型,还有不为int型的函数吗

以下代码注释中还有个问题
#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);          //这里的意思是如果输入为整型成功读入status的值就为1,如果为字符型失败就为0?
        } while(status == 1);

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

        return 0;
}

谢谢
最佳答案
2020-2-12 19:57:55
scan族函数很脆弱,用%d输入数据时,如果遇到非法输入,比如本来应该输入数字,但你却输入字符。这个时候它不会读入任何数据,你输入的字符还会留在缓存区。所以该函数很不安全,vs里禁止使用scanf函数,而使用更安全的scanf_s。小甲鱼说,scanf 返回值:

如果函数调用成功,返回值是成功获取并填充到附加参数中的个数。

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

如果读取到标准输入流的结尾处,则返回 EOF。
也就是说返回值是用来判断是否输入非法数据或者没有得到想要的数据。
还有返回值可以是任何已知数据类型,包括int char 结构体和类等等。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-12 16:15:39 | 显示全部楼层

回帖奖励 +10 鱼币

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

使用道具 举报

发表于 2020-2-12 18:10:25 | 显示全部楼层

回帖奖励 +10 鱼币

本帖最后由 沉默的人e 于 2020-2-12 18:11 编辑

楼主看下这个
批注 2020-02-12 180655.png
我输入3和e的时候,a = 1了,a = 1 是因为第一个3当字符输进去了,成功读取,1;第二个e输入时,不符合int类型,所以不能成功读取,0(大概可能应该是 a =  1+0 = 1)
他说的成功读入大概其就是你输给它的值和他的类型是匹配的,你比如我用“%d”,后面输入值时,却输了“C”这么一个字符,那么scanf他就不能成功读取,返回值就是0了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-12 19:57:55 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
scan族函数很脆弱,用%d输入数据时,如果遇到非法输入,比如本来应该输入数字,但你却输入字符。这个时候它不会读入任何数据,你输入的字符还会留在缓存区。所以该函数很不安全,vs里禁止使用scanf函数,而使用更安全的scanf_s。小甲鱼说,scanf 返回值:

如果函数调用成功,返回值是成功获取并填充到附加参数中的个数。

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

如果读取到标准输入流的结尾处,则返回 EOF。
也就是说返回值是用来判断是否输入非法数据或者没有得到想要的数据。
还有返回值可以是任何已知数据类型,包括int char 结构体和类等等。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 05:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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