You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 21:37:40