为何我的C语言代码无法执行else if语句中的打印操作?
C语言日期转文字表述问题修复方案
问题分析
你提供的代码存在两个核心问题:
- printf调用错误:
printf(&day, "st");的用法不符合C语言规范,printf的第一个参数必须是格式控制字符串,第二个及以后才是要输出的变量,你把变量地址和后缀顺序搞反了,导致日期内容无法正确输出。 - 缺少月份文字转换逻辑:代码里没有处理将数字月份转为对应文字的逻辑,这也是你说“仅能输出月份”(实际原代码未输出月份,推测是你之前版本的代码遗留问题)的原因。
修正后的代码
以下是仅用else-if语句实现的简洁方案,完全符合你当前的学习范围(不使用循环):
#include <stdio.h> int main() { int month, day, year; printf("Enter date (mm/dd/yyyy): "); // 修正scanf格式,去掉多余空格,避免输入时的格式匹配问题 scanf("%d/%d/%d", &month, &day, &year); // 输出月份的文字表述(else-if实现) if (month == 1) printf("一月 "); else if (month == 2) printf("二月 "); else if (month == 3) printf("三月 "); else if (month == 4) printf("四月 "); else if (month == 5) printf("五月 "); else if (month == 6) printf("六月 "); else if (month == 7) printf("七月 "); else if (month == 8) printf("八月 "); else if (month == 9) printf("九月 "); else if (month == 10) printf("十月 "); else if (month == 11) printf("十一月 "); else if (month == 12) printf("十二月 "); else printf("无效月份 "); // 输出日期及后缀(修正printf调用) if (day == 1 || day == 11 || day == 21 || day == 31) printf("%d日", day); else if (day == 2 || day == 12 || day == 22) printf("%d日", day); else if (day == 3 || day == 13 || day == 23) printf("%d日", day); else if (day >=4 && day <=31) printf("%d日", day); else printf("无效日期"); // 输出年份 printf(" %d\n", year); return 0; }
如果需要英文表述的日期,可将月份部分替换为英文单词,日期后缀改为st/nd/rd/th:
// 英文月份示例 if (month == 1) printf("January "); // ...其余月份对应英文单词 // 英文日期后缀示例 if (day == 1 || day == 11 || day == 21 || day == 31) printf("%dst, ", day); else if (day == 2 || day == 12 || day == 22) printf("%dnd, ", day); else if (day == 3 || day == 13 || day == 23) printf("%drd, ", day); else if (day >=4 && day <=31) printf("%dth, ", day);
关键修正点
- printf格式修正:把错误的
printf(&day, "st");改为printf("%dst, ", day);(或中文日期格式),正确输出日期数字加对应后缀。 - 补充月份转换逻辑:用
else-if链实现数字到文字的转换,完全符合你要求的无循环简洁写法。 - 增加合法性判断:对月份、日期的有效值范围做简单校验,避免非法输入导致的错误输出。
内容的提问来源于stack exchange,提问作者Victoria Sztern
相关产品推荐
相关产品推荐

