输入年和月份输出这一年的该月份有多少天,为什么我这个运行不了

img

img

临时解决:scanf换成scanf_s
永久性解决,参考:

在你代码的第一行添加如下代码:

#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试试

img

底下提示了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.

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632