scanf函数

简介: 该文介绍了C语言中`scanf`函数用于输入变量值,而`printf`函数用于输出变量值。`scanf`在读取数值时会自动过滤空白字符,允许数据间有空格或换行,不影响解析。`scanf`返回值表示成功读取的变量数,0表示未读取或匹配失败,EOF表示读取错误或文件结尾。常见占位符包括 `%c`(字符)、`%d`(整数)、`%f`(浮点数)、`%s`(字符串)和`%[]`(指定字符集)。对于`%c`,不会忽略空白字符,但可加空格跳过前导空白。文章还提及在VS2022中,`scanf`被认为是不安全的,推荐使用`scanf_s`,并提供了如何在VS中使用`scanf`的解决方法。

当我们需要给变量输入值的时候就需要用到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 前加上一个空格, 表示跳过零个或多个空白字符。

目录
相关文章
|
7月前
|
C语言
你真的学会了printf和scanf函数吗?
你真的学会了printf和scanf函数吗?
scanf和getchar区别
scanf和getchar区别
215 0
c中scanf函数注意点
c中scanf函数注意点
85 0
|
缓存
scanf和printf函数
scanf和printf函数
152 0
|
C语言
printf与scanf函数的返回值
printf与scanf函数的返回值
|
人工智能
scanf函数与getchar函数区别
scanf函数与getchar函数区别
150 0
|
C语言
C语言常见输入函数(scanf(),getchar(),getche(),getch(),gets())大汇总
C语言常见输入函数(scanf(),getchar(),getche(),getch(),gets())大汇总
104 0
|
C语言
论Scanf、Gets、Getchar的区别
论Scanf、Gets、Getchar的区别
174 0
scanf与scanf_s
scanf与scanf_s
104 0