代码:
#define _CRT_SECURE_NO_WARNINGS 1 // 禁用MSVC编译器中关于安全函数的警告
#include <stdio.h> // 引入标准输入输出库
int main()
{
int a, b, sum; // 声明三个整型变量a, b, sum
printf("请输入第一个数: "); // 提示用户输入第一个数
scanf("%d", &a); // 读取用户输入的整数并存储在变量a中
printf("请输入第二个数: "); // 提示用户输入第二个数
scanf("%d", &b); // 读取用户输入的整数并存储在变量b中
sum = a + b; // 计算a和b的和,并将结果存储在变量sum中
printf("%d + %d = %d\n", a, b, sum); // 打印出a, b和它们的和
return 0; // 程序正常结束
}
#define _CRT_SECURE_NO_WARNINGS 1
-
这行代码是一个预处理指令,用于告诉MSVC(Microsoft Visual C++)编译器忽略关于使用不安全函数(如
scanf
、sprintf
等)的警告。在较新版本的Visual Studio中,这些函数被认为是不安全的,因为它们可能导致缓冲区溢出等安全问题。然而,对于简单的示例或学习目的,使用这些函数是可行的,并且通过这个宏可以禁用相关的警告。
代码生成结果:
代码中出现两个警告,不影响代码正常运行,要想解决这个警告,再定义一个变量,来储存scanf的返回值如下所示:
#define _CRT_SECURE_NO_WARNINGS 1 // 禁用MSVC编译器中关于安全函数的警告
#include <stdio.h> // 引入标准输入输出库,用于执行输入输出操作
int main()
{
int a, b, sum, c; // 声明四个整型变量:a, b用于存储用户输入的两个数,sum用于存储它们的和,c用于存储scanf的返回值
printf("请输入第一个数: "); // 提示用户输入第一个整数
c = scanf("%d", &a); // 读取用户输入的整数并存储在变量a中,同时scanf的返回值(成功读取的项目数)存储在c中
// 注意:这里没有检查c的值,即没有错误处理
printf("请输入第二个数: "); // 提示用户输入第二个整数
c = scanf("%d", &b); // 读取用户输入的整数并存储在变量b中,同时更新c的值为这次scanf的返回值
// 同样,这里也没有检查c的值
sum = a + b; // 计算a和b的和,并将结果存储在变量sum中
printf("%d + %d = %d\n", a, b, sum); // 打印出a, b和它们的和
return 0; // 程序正常结束
}
完善代码:
如果想让代码有错误处理部分 ,在其中加个if语句
#define _CRT_SECURE_NO_WARNINGS 1 // 禁用MSVC编译器中关于使用不安全函数(如scanf)的警告
#include <stdio.h> // 引入标准输入输出库,用于执行输入输出操作
int main()
{
int a, b, sum, c; // 声明四个整型变量:a, b 用于存储用户输入的两个数,sum 用于存储它们的和,c 用于存储scanf的返回值
printf("请输入第一个数: "); // 提示用户输入第一个整数
c = scanf("%d", &a); // 读取用户输入的整数并存储在变量a中,同时scanf的返回值存储在c中以检查是否成功读取
// 检查scanf是否成功读取了一个整数
if (c != 1) {
printf("读取第一个数时发生错误。\n"); // 如果c不等于1,表示读取失败,打印错误信息
// 这里可以添加额外的错误处理代码,比如退出程序
return 1; // 返回非零值表示程序异常结束
}
printf("请输入第二个数: "); // 提示用户输入第二个整数
c = scanf("%d", &b); // 读取用户输入的整数并存储在变量b中,同时更新c的值为这次scanf的返回值
// 再次检查scanf是否成功读取了一个整数
if (c != 1) {
printf("读取第二个数时发生错误。\n"); // 如果c不等于1,表示读取失败,打印错误信息
// 这里也可以添加额外的错误处理代码
return 1; // 返回非零值表示程序异常结束
}
sum = a + b; // 计算a和b的和,并将结果存储在变量sum中
printf("%d + %d = %d\n", a, b, sum); // 打印出a, b和它们的和
return 0; // 程序正常结束,返回0
}
这样代码就有了错误处理的能力