scanf详解
在C语言中scanf作为重要的输入操作函数,对于熟悉C语言有重要意义。
1.头文件
scanf和printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include <stdio.h>。它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。
2.格式
如:
#include<stdio.h>
int main()
{
int a;
scanf("%d", &a);
return 0;
}
也就是scanf(“格式”,地址);的形式,但是在VS2019等编译器上编译时会报错,此时只需要在程序第一行加上
#define _CRT_SECURE_NO_WARNINGS 1
就可以正常编译了。
在一些特殊情况如需要输入多个值时
#include<stdio.h>
int main()
{
int a,b;
scanf("%d %d", &a,&b);
return 0;
}
在窗口输入时也应该按照双引号中的格式进行输入,如上面这个程序的输入就需要输入一个整数+空格+整数。
3.scanf的返回值
首先我们来看这个程序
#include<stdio.h>
int main()
{
int a,b;
int c=scanf("%d %d", &a,&b);
printf("%d", c);
return 0;
}
通过运行我们发现输入两个值后输出结果为2
即scanf返回值为读取到的输入值的个数,由此我们可以进一步延伸
当我们需要输入多组数据也就是一下子需要输入多个数时,我们可以根据scanf的返回值来进行一个循环的判断
#include<stdio.h>
int main()
{
int a,b;
while (scanf("%d %d", &a, &b) == 2)
{
printf("%d", a / b);
}
return 0;
}
如果输入的数据个数不是2,那么循环结束,同理也能用EOF文件结束标志来判断,scanf如果遇到了EOF(即你输入的是ctrl+z),返回的是-1,如果读取发生错误,就会返回0。
#include<stdio.h>
int main()
{
int a,b;
while (scanf("%d %d", &a, &b) !=EOF)
{
printf("%d", a / b);
}
return 0;
}
这里注意,在编译器输入Ctrl+z即可跳出while循环
由此来实现多组数据输入
4.scanf结束数据输入
scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:
(1)遇空格、“回车”、“跳格”键;
(2)遇宽度结束;
(3)遇非法输入。
如果想输入一段带空格的字符串,我们可以用scanf("%[^\n]",str];来读取含空格的字符串或者直接用gets();函数也可以达到一样的效果,^可以理解为非。 ^\n就表示非\n,即遇到非\n的字符就读入,即他可以读入直到你输入一个回车前的所有字符(包括空格)。所以scanf里面最好不要使用\n和空格。
CSDN-Ada助手: 恭喜您在博客中分享了关于C++ static成员的知识,内容讲解清晰易懂,让读者受益匪浅。希望您能继续保持创作的热情和耐心,不断提升自己的写作水平。下一步可以考虑深入探讨C++中其他特性或者与static成员相关的高级用法,让读者更全面地了解这门编程语言。期待您的下一篇作品!
CSDN-Ada助手: 恭喜您发布了关于C++类和对象的博客,内容相当有深度,对于学习C++的读者来说必定受益匪浅。希望您能继续保持创作热情,探索更多有趣的主题,比如C++中的继承和多态性等,这些内容也是很多读者关注的焦点。期待您的下一篇博客,谢谢您的分享!愿您创作愈发精彩!
CSDN-Ada助手: 恭喜作者发布了新的博客!对于C++类和对象中单参数构造函数的隐式类型转化这个主题,您阐述得非常清晰和详细。建议下一步可以深入探讨多参数构造函数的使用方法,或者是介绍一些高级的C++特性,让读者能够更全面地了解这门语言。期待作者的继续努力和创作!祝您越来越好。
CSDN-Ada助手: 不知道 Java 技能树是否可以帮到你:https://edu.csdn.net/skill/java?utm_source=AI_act_java
知堂织韵: %*u是个什么东西啊?