目录
项目场景:vs_2022中使用scanf函数输入
问题描述:vs_2022中使用scanf函数报错
原因分析:在vs_2022中使用scanf函数无返回值则会被视为不安全
解决方案:用_CRT_SECURE_NO_WARNINGS帮助其使用安全
项目场景:
在测试项中,我们封装一个max和min函数,分别用以求最大公约数和最小公倍数。首先先定义ab两个变量来作为两个数,然后用scanf函数输入进行赋值,再定义一个cd变量调用max和min函数以求得两数的最大公约数和最小公倍数,再用printf函数打印输出。
#include<stdio.h>
int max(int a,int b) {
int max;
if (a > b)
max = b;
else
max = a;
for (;max > 0; max--) {
if (a % max == 0 && b % max == 0)
break;
}
return max;
}
int min(int a,int b) {
int min;
if (a > b)
min = a;
else
min = b;
for (;;min++) {
if (min % a == 0 && min % b == 0)
break;
}
return min;
}
int main()
{
int a, b;
printf("请输入第一个数:");
scanf("%d",&a);
printf("请输入第二个数:");
scanf("%d",&b);
int c = max(a, b);
printf("最大公约数为%d。", c);
int d = min(a, b);
printf("最小公倍数为%d。", d);
return 0;
}
问题描述
在点击过调试运行按钮后,不出意外的失败了,但是vs并没有报错,只是给出了两个scanf的警告:
原因分析:
'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
意思是scanf此函数可能不安全。考虑改用scanf_s。要禁用弃用,请使用_CRT_SECURE_NO_WARNINGS。那么这个_CRT_SECURE_NO_WARNINGS怎么用呢?
解决方案:
在整个项目的起始位置,写上#define _CRT_SECURE_NO_WARNINGS,例如:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int max(int a,int b) {
int max;
if (a > b)
max = b;
else
max = a;
for (;max > 0; max--) {
if (a % max == 0 && b % max == 0)
break;
}
return max;
}
int min(int a,int b) {
int min;
if (a > b)
min = a;
else
min = b;
for (;;min++) {
if (min % a == 0 && min % b == 0)
break;
}
return min;
}
int main()
{
int a, b;
printf("请输入第一个数:");
scanf("%d",&a);
printf("请输入第二个数:");
scanf("%d",&b);
int c = max(a, b);
printf("最大公约数为%d。", c);
int d = min(a, b);
printf("最小公倍数为%d。", d);
return 0;
}
然后点击运行,结果如图:
(本文仅供学习时参考,如有错误,纯属作者技术不到位,不足之处请多指教,谢谢)