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开始按声明顺序自动赋值的特性,建立三者的下标映射:
- 枚举值从Jan=0到December=11,刚好对应数组下标范围
- 建立和枚举顺序完全对齐的月份名称字符串数组,用枚举值当下标就能取出对应月份的文本
- 原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
相关产品推荐
相关产品推荐

