C语言降序插入排序程序多接收一个输入的问题求助
解决插入排序程序接收额外输入的问题
问题原因
你在读取数组元素的scanf语句中使用了"%d \t"作为格式字符串,scanf会将格式字符串中的空白符(空格、制表符、换行符)解析为“匹配任意数量的空白字符”。这就导致每次读取完一个整数后,程序会持续等待,直到遇到非空白的输入才会结束当前scanf调用。当你输入完n个数字后,程序仍会等待下一个非空白输入,表现为需要接收n+1个值。
修复方案
将读取数组元素的scanf格式字符串改为"%d",移除后面的空格和制表符,这样每次读取一个整数后就会立即结束当前scanf调用,不会额外等待输入。
修改后的完整代码
// 降序插入排序 #include <stdio.h> // 函数声明移至main外部,符合代码规范 void printArray(int a[], int n); // 标准C中main返回类型应为int int main() { int size, i, ul, t; printf("Enter the size of the array: "); scanf("%d", &size); int array[size]; printf("Enter the array elements: \n"); for (i = 0; i < size; i++) scanf("%d", &array[i]); // 修正格式字符串,移除多余空白符 printf("\nThe original array is: \n"); printArray(array, size); for (i = 1; i < size; i++) { ul = i; while (ul > 0) { if (array[ul] > array[ul - 1]) { t = array[ul]; array[ul] = array[ul - 1]; array[ul - 1] = t; } ul -= 1; } } printf("\nThe new array after sorting in descending order using Insertion Sort is: \n"); printArray(array, size); return 0; // 对应int main的返回值要求 } void printArray(int a[], int n) { int i; for (i = 0; i < n; ++i) printf("%d \t", a[i]); }
额外的代码规范建议
- 标准C语言规定
main函数的返回类型必须是int,而非void,因此需要添加return 0;语句以符合规范。 - 将函数声明放在
main函数外部,能让代码结构更清晰,便于维护。
内容的提问来源于stack exchange,提问作者Sakshar
相关产品推荐
相关产品推荐

