在你代码的第一行添加如下代码:
#define _CRT_SECURE_NO_WARNINGS 1
随着版本的更新,旧版本的scanf、sprintf、gets等函数都被认为是不安全的,在vs2017等后续版本中,替换成了scanf_s、sprintf_s、gets_s(大部分都是在原来函数名的后面加了_s,并增加了参数),所以,如果需要兼容旧版本函数,需要添加这个宏定义来忽略这个错误。
代码的第一行加上这个就行了
#define _CRT_SECURE_NO_WARNINGS 1
把scanf改为scanf_s试试
底下提示了scanf用不了可以将scanf换成scanf_s,或者加一段#define _CRT_SECURE_NO_WARNINGS 1就可以用scanf。
供参考:
#include<stdio.h>
int isLeap(int y)
{
return ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0));
}
int Getdaysofmonth(int y, int m)
{
int days[] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
if (isLeap(y) && m == 2)
return days[m - 1] + 1;
else
return days[m - 1];
}
int main()
{
int y, m;
printf("请输入年份 月份:");
scanf_s("%d%d", &y, &m);
printf("%d年%d月共:%d天\n", y, m, Getdaysofmonth(y, m));
return 0;
}
你这个不是您代码的问题,而是编译器版本太高,对原来的代码兼容性变小,就会误认为它有安全问题。如果你换一个编译器运行,不用scanf_s,用scanf也能运行.
比如visual stdio 2016.