You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复C语言中‘format ‘%d’期望int类型参数,实参为int *’错误?

修复printf格式错误及闰年判断逻辑问题

解决格式错误

你遇到的format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘int *’错误,根源是所有printf语句里错误使用了&year。&是取地址运算符,返回的是变量year的内存地址(类型为int*),而printf的%d格式符要求传入int类型的数值,而非指针。

只需把所有printf中的&year替换成year,直接传入变量的值即可解决这个格式错误。

修正闰年判断逻辑

另外,原代码的闰年判断逻辑不符合公历规则,会导致错误判定(比如1900年能被100整除但不能被400整除,实际不是闰年,但原代码会误判为闰年)。正确的闰年判定规则是:

  • 能被400整除的年份是闰年;
  • 能被100整除但不能被400整除的不是闰年;
  • 能被4整除但不能被100整除的是闰年;
  • 其余情况均不是闰年。

修正后的完整代码

分支判断写法

#include <stdio.h>

int main() 
{
    int year;

    printf("enter year:");
    scanf("%d", &year);

    if (year % 400 == 0) {
        printf("%d is a leap year\n", year);
    } else if (year % 100 == 0) {
        printf("%d is not a leap year\n", year);
    } else if (year % 4 == 0) {
        printf("%d is a leap year\n", year);
    } else {
        printf("%d is not a leap year\n", year);
    }
    return 0;
}

简洁逻辑表达式写法

#include <stdio.h>

int main() 
{
    int year;

    printf("enter year:");
    scanf("%d", &year);

    if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
        printf("%d is a leap year\n", year);
    } else {
        printf("%d is not a leap year\n", year);
    }
    return 0;
}

内容的提问来源于stack exchange,提问作者Shivbardhan Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 19:43:11