C语言冒泡排序代码疑问:如何展示用户输入的原始数据?
解决C语言冒泡排序中无法展示原始输入数据的问题
要展示用户输入的原始数据,你需要做两个关键修改:记录实际输入的元素个数,以及在排序前打印原始数据(或复制一份原始数组保存)。以下是修正后的完整代码:
#include <stdio.h> int main(void) { int array[100]; int count = 0; // 记录实际输入的元素数量 // 输入数据,记录实际个数 for(int i = 0; i < 100; i++) { printf("Enter number %d: ", i + 1); scanf("%d", &array[i]); if(array[i] == 0) break; count++; // 每输入一个有效数字,计数加1 } // 打印原始输入数据 printf("原始输入数据:["); for(int i = 0; i < count; i++) { if(i == count - 1) { printf("%d", array[i]); } else { printf("%d, ", array[i]); } } printf("]\n"); // 冒泡排序(使用实际元素个数count) for(int i = 0; i < count - 1; ++i) { int swapped = 0; for(int ctr = 0; ctr < count - i - 1; ++ctr) { if(array[ctr] > array[ctr + 1]) { int temp = array[ctr]; array[ctr] = array[ctr + 1]; array[ctr + 1] = temp; swapped = 1; } } if(swapped == 0) { break; } } // 打印排序后的数据 printf("排序后数据:["); for(int i = 0; i < count; i++) { if(i == count - 1) { printf("%d", array[i]); } else { printf("%d, ", array[i]); } } printf("]\n"); return 0; }
关键修改说明:
- 记录实际输入个数:新增
count变量,每次输入非0数字时递增,替代原来用sizeof(array)/sizeof(array[0])计算的错误数组总大小(原方法会得到100,而实际输入的元素远少于这个数)。 - 打印原始数据:在排序操作前,遍历输入的有效元素(用
count控制范围),打印原始输入内容。 - 修正排序和输出的范围:所有循环的终止条件都改为
count,避免处理数组中未输入的无效元素(原代码会打印大量未初始化的垃圾值或0)。
运行示例:
Enter number 1: 1 Enter number 2: 2 Enter number 3: 3 Enter number 4: 4 Enter number 5: 5 Enter number 6: 0 原始输入数据:[1, 2, 3, 4, 5] 排序后数据:[1, 2, 3, 4, 5]
如果需要保留原始数组用于后续对比,可额外创建备份数组,在输入完成后复制原始数据:
int original_array[100]; for(int i = 0; i < count; i++) { original_array[i] = array[i]; }
之后打印original_array即可展示原始数据,原数组用于排序。
内容的提问来源于stack exchange,提问作者imstillnewhere
相关产品推荐
相关产品推荐

