C语言分组输出学生ID仅显示每组最后一个,如何修正?
问题分析与解决
问题根源
你当前代码中使用gr1、gr2、gr3三个单个整数变量存储分组ID,每次循环时新的符合条件的ID会直接覆盖变量中之前存储的值,因此最终只能输出每组最后一个输入的ID。要保存同一组的所有ID,必须使用数组来存储,同时需要额外的变量记录每组实际存储的元素数量。另外,你代码最后输出第三组时误写为Grupa 1,这也是需要修正的小问题。
修正后的代码
#include <stdio.h> #define MAX_STUDENTS 1000 // 最多支持1000名学生 int main() { int n; scanf("%d", &n); // 定义三个数组存储三组ID,以及对应的计数器记录每组的元素数量 int group1[MAX_STUDENTS], group2[MAX_STUDENTS], group3[MAX_STUDENTS]; int count1 = 0, count2 = 0, count3 = 0; for (int i = 0; i < n; ++i) { int br; scanf("%d", &br); int last_digit = br % 10; // 提取ID末位数字 if (last_digit >= 0 && last_digit <= 2) { group1[count1++] = br; // 将ID加入第一组,计数器加1 } else if (last_digit >= 3 && last_digit <= 5) { group2[count2++] = br; // 将ID加入第二组,计数器加1 } else { group3[count3++] = br; // 将ID加入第三组,计数器加1 } } // 输出第一组 printf("Grupa 1\n"); for (int i = 0; i < count1; ++i) { printf("%d ", group1[i]); } printf("\n"); // 输出第二组 printf("Grupa 2\n"); for (int i = 0; i < count2; ++i) { printf("%d ", group2[i]); } printf("\n"); // 输出第三组(修正原代码的笔误) printf("Grupa 3\n"); for (int i = 0; i < count3; ++i) { printf("%d ", group3[i]); } printf("\n"); return 0; }
代码说明
- 数组与计数器:用
group1、group2、group3三个数组分别存储三组学生ID,count1、count2、count3记录每组的实际元素个数,确保输出时只遍历有效数据。 - 简化判断逻辑:通过
last_digit >= 0 && last_digit <=2替代多个||判断,代码更简洁易读。 - 修正输出笔误:将原代码最后输出的
Grupa 1改为Grupa 3,匹配第三组的输出。 - 格式优化:输出每组ID时用空格分隔,最后换行,符合你期望的输出格式。
内容的提问来源于stack exchange,提问作者Kratos1919
相关产品推荐
相关产品推荐

