You need to enable JavaScript to run this app. C语言实现Months枚举与Numbers数组关联打印以达成预期输出
优惠活动
大模型
产品
解决方案
定价
更多

C语言实现Months枚举与Numbers数组关联打印以达成预期输出

原代码存在的语法与逻辑问题
  • 数组定义缺失类型标识:Numbers[12] = {3,4,5,1,2,7,8,9,3,4,7,8} 未声明为int类型,编译器会直接抛出语法错误。
  • 误用枚举作为可索引数组:C语言中的枚举成员是编译期确定的整型常量,运行时无法通过Months[i]这类下标语法访问,直接打印枚举值只会输出0、1、2...的连续数字,无法得到月份名称文本。
  • 循环判断条件逻辑反转:for(int i = 0; i> 12; i ++) 初始i值为0,第一次条件判断时0>12不成立,循环块完全不会执行,正确的终止条件应为i小于总月份数12。
  • 打印格式与预期不匹配:原printf模板固定输出"Month: %d Number: %d",不符合要求的“月份名: 关联数值”的逐行展示格式。
修正实现逻辑

利用C语言枚举成员默认从0开始按声明顺序自动赋值的特性,建立三者的下标映射:

  1. 枚举值从Jan=0到December=11,刚好对应数组下标范围
  2. 建立和枚举顺序完全对齐的月份名称字符串数组,用枚举值当下标就能取出对应月份的文本
  3. 原Numbers数组的元素顺序和枚举顺序一一对应,同一下标即可取到关联的数值

修正后的完整可运行代码:

#include <stdio.h>

int main ()
{
    // 与枚举顺序严格对齐的月份名称字符串数组
    const char *month_names[] = {
        "Jan", "Feb", "March", "April", "May", "June",
        "July", "August", "September", "October", "November", "December"
    };
    // 补充数组的int类型声明
    int Numbers[12] = {3,4,5,1,2,7,8,9,3,4,7,8};
    // 枚举成员默认从0开始顺序赋值,与两个数组的下标一一对应
    enum Months {Jan, Feb, March, April, May, June, July, August, September, October, November, December};            
            
    // 以枚举值范围作为循环边界,避免硬编码数字
    for(int i = Jan; i <= December; i++){
        // 按预期格式逐行打印内容
        printf("%s:  %d\n", month_names[i], Numbers[i]);   
    }
    return 0;
}
运行后输出效果
Jan:  3
Feb:  4
March: 5
April: 1
May: 2
June: 7
July: 8
August: 9
September: 3 
October: 4 
November: 7
December: 8

内容的提问来源于stack exchange,提问作者tony selcuk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.04 12:06:09