上篇文章简单介绍了scanf函数,本篇文第一部分是对上篇的补充。
我们先看一下为什么vs上无法运行scanf。
这句话意思是VS认为 scanf 不安全,让我们使用 scanf_s 。但是 scanf_s 这个函数不是C语言的标准函数,是VS这个IDE提供的,这就表明在其他编译器上是不能使用 scanf_s 这个函数的。那有什么解决方案呢?
- 方法一:在当前代码的第一行加上 #define _CRT_SECURE_NO_WARNINGS 1
这样就解决了 scanf 函数不能使用的问题。
- 方法二:如果每次使用方法一的话就有点麻烦了。如果可以每次打开就都有这个就好了。只要我们安装好VS,我们的安装路径下就会有一个 newc++file.cpp 的文件。所有新建的 .c/.cpp文件都是拷贝 newc++file.cpp 这个文件的!如果能在这个文件上加上 #define _CRT_SECURE_NO_WARNINGS 1 这句话就好了。
- 首先找到这个文件,用记事本打开。
- 接着输入 #define _CRT_SECURE_NO_WARNINGS 1 这句话,最后保存就完成了。
-
注意,很可能保存时会出现权限不够的提示,这时候只需要把这个文件拉到桌面上,弄完后在弄回原来的位置就行了。
-
占位符。scanf常用的占位符如下。
在这些占位符中,出了%c以外,都会自动忽略起首的空白字符。%c不忽略空白字符,总是返回当前第一个字符,无论该字符是否为空格。如果要强制跳过字符前的空白字符,可以写成scanf(“ %c,&ch”),即%c前加上一个空格,表示跳过零个或多个空白字符。
接下来说一下占位符%s。它其实不能简单地等同于字符串。它的规则是,从当前第一个非空白字符开始读起,直到遇到空白字符位置。因为%s不会包含空白字符,所以无法读取多个单词,除非多个%s一起使用,这就意味着%s不适合读取可能包含空格的字符串,比如书名或者歌曲名。另外,scanf 遇到%s占位符,会在字符串变量末尾存储一个空字符\0。
scanf 将字符串读入字符数组是,不会检测字符串是否超过了数组长度。所以,储存字符串时,很可能会超过数组的边界,导致预想不到的结果。为了防止这种情况,使用%s占位符时,应该指定读入字符串的最长长度,即写成%[m]s,其中[m]是一个整数,表示读取字符串的最大长度,后面的字符将被丢弃。
这就是今天的内容啦。消失的下雨天我好想再淋一遍。