当我们需要给变量输入值的时候就需要用到scanf函数
如果需要将变量的值输出到屏幕上则可以使用printf函数
如:
结果为:
一次输入多个变量时:
scanf("%d%d%f%f",&a,&b,&c,&d);
scanf函数处理数值占位符时,会自动过滤掉空白字符,包括括号,制表符,换行符等
所以输入的多个数据之间有一个或多个空格不影响scanf函数解读数据,另外,使用回车键将数据分成几行也不影响解读
结果为:
当输入:1 2 3.1 4.2时,输出结果为:1 2 3.1 4.2
当输入123.14.2时,(数值之间没有加空格),输出结果为12
在VS2022编译器中会表示scanf函数是不安全的,建议使用scanf_s来替代
scanf_s是VS提供的函数,在其他编译器中可能不适用,所以VS也会提示在代码前加上:#define _CRT_SECURE_NO_WARNINGS 1
所以如果想在VS上使用scanf函数
就在. c文件的第一行加上:
#define _CRT_SECURE_NO_WARNINGS 1
但每次加这一行不方便,有什么方法自定加呢?
在VS上新建文件的时候,都是拷贝newc++file. cpp这个文件,所有的.c/.cpp文件都是拷贝newc++file. cpp这个文件的,所以如果在newc++file. cpp文件的第一行加上#define _CRT_SECURE_NO_WARNINGS 1以后新建的文件中自然就有这句代码
操作:借助一个小工具everything来搜索newc++file. cpp找到具体路径,然后右击打开记事本或者其他,在其中输入:
#define _CRT_SECURE_NO_WARNINGS 1
即可
VS认为不安全的函数还有:
strcpy strcat
scanf()处理数值占位符时,会自动过滤空白字符, 包括空格、制表符、换行符等。
所以,用户输入的数据之间,有一个或多个空格不影响 scanf() 解读数据。另外, 用户使用回车键, 将输入分成几行,也不影响解读。
scanf的返回值
scanf() 的返回值是一个整数, 表示成功读取的变量个数。
如果没有读取任何项,或者匹配失败,则返回0。如果在成功读取任何数据之前,发生了读取错误或者遇到读取到文件结尾,则返回常量 EOF。
占位符
scanf函数常用的占位符如下,与printf的占位符基本一致
%c:字符
%d:整数
%f:float类型浮点数
%lf:double类型浮点数
%lf:long double类型浮点数
%s:字符串
%[]:在方括号中指定一组匹配的字符,(比如%[0-9]),遇到不在集合之中的字符,则直接跳过
上面所有占位符之中,除了%c 以外,都会自动忽略起首的空白字符。 %c 不忽略空白字符,总是返回当前第一个字符,无论该字符是否为空格。
如果要强制跳过字符前的空白字符,可以写成 scanf(" %c", &ch) , 即%c 前加上一个空格, 表示跳过零个或多个空白字符。