一、scanf()的使用
控制台输入和scanf()内的字串部分输入形式保持一致,原样输入
int a, b;
scanf("%d %d", a, b);
scanf("%d-%d", a, b);
如 第2行:
两个%d之间用的空格,则输入的时候也要加空格
如 第3行:
两个%d之间用的短线,则输入的时候也要加“-”
输入与输出结果:
1.
2.
二、scanf()的返回值
scanf函数是C语言中用于标准输入读取不同类型数据的函数,
sacnf的返回值是成功赋值的项目数,
如果失败,则返回 EOF
例1:(在执行的时候可能会报错--4996,如果报错下面有解决方法 哦)
#include<stdio.h>
int main() {
int a;
printf("请输入一个整数:");
if (scanf("%d", &a) == 1) {
printf("输入的整数是:%d\n", a);
}
else {
printf("输入失败!\n");
}
}
例2:
#include<stdio.h>
int main() {
int a, b;
printf("请输入整数:");
if (scanf_s("%d %d", &a, &b) == 2) {
printf("输入的整数是:%d %d\n", a, b);
}
else {
printf("输入失败!\n");
}
}
三、4996报错
在使用scanf时可能出现的问题:
原因:
错误 C4996 是一个编译器警告,表示使用了一个被认为是不安全或者已经不推荐使用的函数。在这个例子中,scanf 函数被使用,这个函数是一个不安全的输入/输出函数,它可能会导致缓冲区溢出。
解决办法:
- 使用安全的替代函数,例如 scanf_s(在 Microsoft Visual Studio 中)或其他线程安全的函数。
//将
scanf("%d", &a) == 1
//改写为
scanf_s("%d", &a, sizeof(a)) == 1
- 如果你确信使用当前函数不会引起安全问题,可以通过编译器指令 #pragma warning(disable:4996) 来禁用这个特定警告。
#ifdef _MSC_VER
#pragma warning(disable:4996)
#endif
// 其他代码
_MSC_VER
_MSC_VER是微软的预编译控制。
_MSC_VER可以分解为:
MS:Microsoft的简写。
C:MSC就是Microsoft的C编译器。
VER:Version的简写。
_MSC_VER的意思就是:Microsoft的C编译器的版本。
微软不同时期,编译器有不同的版本:
MS VC++10.0 _MSC_VER=1600
MS VC++9.0 _MSC_VER=1500
MS VC++8.0 _MSC_VER=1400
......
其中MS VC++10.0就是Visual C++ 2010,MS VC++9.0就是Visual C++2008,MS VC++8.0就是Visual C++2005
在程序中加入_MSC_VER宏可以根据编译器版本让不同版本的编译器选择性地编译一段程序。