C语言中如何简化数组元素(除最后一个)添加逗号的打印逻辑?
优化方案:标志位控制逗号输出
你当前的实现需要先遍历数组统计奇偶数量,确实多了一次不必要的遍历。更简洁的方式是用标志位判断是否为当前类别第一个元素,直接在打印时控制逗号,无需提前统计:
#include <stdio.h> int main(void) { int size; printf("Enter the size of the array: "); scanf("%d", &size); int array[size]; // 输入数组元素 for(int i = 0 ; i < size; i++) { printf("Enter element #%d: ", i+1); scanf("%d", array + i); } // 打印偶数列表 printf("even: "); int is_first_even = 1; // 标记是否是第一个偶数 for(int i = 0 ; i < size; i++) { if(array[i] % 2 == 0) { if(!is_first_even) { printf(", "); // 非第一个元素,先打印逗号 } printf("%d", array[i]); is_first_even = 0; // 打印过第一个元素后,标志位设为0 } } printf("\n"); // 打印奇数列表 printf("odd: "); int is_first_odd = 1; // 标记是否是第一个奇数 for(int i = 0 ; i < size; i++) { if(array[i] % 2 != 0) { if(!is_first_odd) { printf(", "); } printf("%d", array[i]); is_first_odd = 0; } } return 0; }
关键逻辑说明
- 用
is_first_even和is_first_odd两个变量分别标记当前是否是偶数/奇数列表的第一个元素,初始值为1(真)。 - 当遇到第一个偶数/奇数时,直接打印数字,然后将标志位设为0(假)。
- 后续再遇到同类别元素时,先打印逗号再打印数字,确保只有元素之间才会出现逗号,最后一个元素后无多余逗号。
- 省去了单独统计奇偶数量的遍历步骤,代码更简洁,效率也更高。
内容的提问来源于stack exchange,提问作者drkcutie
相关产品推荐
相关产品推荐

