如何修复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
相关产品推荐
相关产品推荐

