1.scanf在VS2022中不安全
VS2022中使用的编译器是msvc,scanf本身是不安全的,因为你输入的变量个数可能比要输入的个数多,所以在VS2022中提供的解决方法是使用scanf_s函数或者使用_CRT_SECURE_NO_WARNINGS
但是scanf_s只能在msvc中使用,在gcc,clang等编译器中无法使用,所以推荐使用第二种方法
首先找到newc++file.cpp文件,因为每个新建文件都是复制的它
在复制一份到桌面上,用记事本打开,在里面写上这句话:
再复制这个文件去替换文件夹中的文件就可以了。
2.占位符
scanf中的占位符与printf一样,这里就不再赘述了。要注意在变量前要加上取地址符&;指针变量除外,数组名也是地址。
3.返回值
scanf的返回值是一个整数,返回成功读取的变量个数。如果没有读取任何项或者匹配失败就返回0。如果在成功读取数据前发生错误或者读取到文件结尾,则返回常量EOF(-1)。
因为一开始就读到了a,没有读取到任何项,所以返回0(???应该是这样)
在windows系统下按ctrl+z,就是读取结束,在VS2022中,按三次ctrl+z,就返回-1了。
补充:printf的返回值是显示在电脑屏幕上的文字个数
先打印43,43是两个字,所以再打印2,2是一个,所以再打印1,就是4321了。
4.读取
限定宽度:用法与printf相似,只不过printf中是最小宽度,而scanf中是最大宽度,数字和字符串都适用;如:
scanf会自动过滤空白字符,如:空格、换行符、制表符等,有多个读取时第二次读取会从第一次读取的结束位置开始向后读,如:
第一个读取%d,那么就读到小数点为止,就是-13,接着从小数点继续向后读直到#,就是 .43e6(科学计数法)。
%c前加空格,可以跳过有效字符前的空格,不然会读取到空格,因为空格也是字符
如上的例子。
%s是从第一个非空字符开始,直到遇到第一个空白字符为止。
可以使用%[^\n]表示读取直到遇到换行符的所有字符,如:
限定输入格式:scanf中格式如何,输入时就应该是什么格式,否则会读取失败
如上的例子,要保持输入格式与scanf中的格式完全一致才能成功读取。