提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
书接上文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;
}
回车与换行
起源:
回车,换行和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找我了,那今天就先到这儿,拜拜₍ᐢ.ˬ.⑅ᐢ₎