11_01 对10_28的补充:scanf的使用(2)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

书接上文10_31 对10_28的补充:scanf的使用(1)


scanf函数的返回值:

scanf函数返回的是int型的数据,
1.有一一对应的输入时,scanf函数返回成功读入的数据项数;
2.读入数据时遇到了“文件结束”(输入的个数少于地址标明的个数)则返回EOF(值位-1)。(scanf函数详解(保姆级讲解)以及使用时需注意的细节里是这样写的:“如果遇到错误或遇到end of file,返回值为EOF。end of file为Ctrl+z 或者Ctrl+d。”,但是我还没找到能使它返回-1的方法)

例如:printf("%d", scanf("%d%d", &a, &b));
(1) 输入两个数时
在这里插入图片描述
实际成功读入的有1,2两个,故返回2;
(2)输入三个数时
在这里插入图片描述
因为scanf里只有两个需要输入的,故返回2;
(3)当输入的一个项目并不是scanf需要的时
在这里插入图片描述
实际成功读入的只有1一个值,故返回1
(4)当需要输入n项 而前n-1项内有scanf不需要的内容时
printf("%d", scanf("%d%d%d%d", &a, &b, &c, &d));
在这里插入图片描述
由结果可以发现,如果需要输入n项 而前n-1项内有scanf不需要的内容,scanf便会从此处开始不再读入
(5)当输入格式与要求不一致时,其实是不会报错的

int a = 0,b = 0,c = 0,d = 0;
printf("%d\n", scanf("%c", &a));
printf("%d\n", scanf("%s", &b));
printf("%d\n", scanf("%d", &c));
printf("%d\n", scanf("%f", &d));
printf("%d\n", a);
printf("%d\n", b);
printf("%d\n", c);
printf("%d\n", d);

结果:
在这里插入图片描述

可以看到,当abcd均为5时,
scanf("%c", &a)scanf("%s", &b)使a b均等于5的ASC||码值;
scanf("%f", &d)则会出现数据异常

由此我们可以自己写一个scanf函数

代码如下,其中需要用到可变参数,有不太明白的地方可以看看之前的内容 10_27 可变参数平均

int my_scanf(char* fmt,...)
{
    int ret=0;
    va_list args;
    va_start(args,fmt);
    vscanf(fmt,args);
    va_end(args);
    return ret;
}
int main()
{
    int a;
    my_scanf("%d",&a);
    printf("%d",a);
    system("pause");
    return 0;
}

回车与换行

起源:

回车(CR)与换行(LF), ‘\r’和’\n’的区别

回车,换行和Enter:

‘\r’是回车,’\n’是换行,前者使光标到行首,后者使光标下移一格。通常用的Enter是两个加起来。

示例:

scanf("%d%d", &a, &b);
printf("%d\r%d", a, b);

输出结果:
在这里插入图片描述
输出时先输出1,但\r后光标回到首位,故1被下一个值2覆盖
加入换行后即可解决

scanf("%d%d", &a, &b);
printf("%d\n\r%d", a, b);

scanf("%d%d", &a, &b);
printf("%d\r\n%d", a, b);

输出结果均为:
在这里插入图片描述

总结

npy找我了,那今天就先到这儿,拜拜₍ᐢ.ˬ.⑅ᐢ₎

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值