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

为何我的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);

关键修正点

  1. printf格式修正:把错误的printf(&day, "st");改为printf("%dst, ", day);(或中文日期格式),正确输出日期数字加对应后缀。
  2. 补充月份转换逻辑:用else-if链实现数字到文字的转换,完全符合你要求的无循环简洁写法。
  3. 增加合法性判断:对月份、日期的有效值范围做简单校验,避免非法输入导致的错误输出。

内容的提问来源于stack exchange,提问作者Victoria Sztern

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 08:12:43