删除一组未知个数数组中的最小值,程序为什么输出不了结果


#include 
int main()
{
    int i,s,a[100];
    do {
        printf("输入数组,输入完成后按回车:\n");
        scanf("%d",&a[i]);
        i++;
    } while(getchar()==' ');
    
    int min=0;
    min=a[0];
    for(s=1;sif(min>a[s])
            min=a[s];
    }
    
    scanf("%d",&min);
    //删除数,末尾补0 
    for(s=0;sif(a[i]==min)
        {
            for(s=i;s-1;s++)
                a[s]=a[s+1];
            a[i-1]=0;
            i--;         
        }
    }
    
    for(s=0;sprintf("%d",a[s]);
    
 } 

img

该回答引用GPTᴼᴾᴱᴺᴬᴵ
您的程序存在以下问题:

  1. 在使用变量i之前未初始化,应该将i初始化为0。

  2. 在删除最小值时,应该使用min变量记录最小值,而不是再次从用户输入中读取最小值。

  3. 在删除数组元素时,应该使用变量s作为循环计数器,而不是使用变量i。

  4. 输出数组元素时应该加上换行符,便于阅读。

下面是修改后的程序:

#include<stdio.h> 
int main()
{
    int i=0, s, a[100];
    do {
        printf("输入数组,输入完成后按回车:\n");
        scanf("%d", &a[i]);
        i++;
    } while (getchar() == ' ');

    int min = a[0];
    for (s = 1; s < i; s++)
    {
        if (min > a[s])
            min = a[s];
    }

    // 删除最小值,末尾补0 
    for (s = 0; s < i; s++)
    {
        if (a[s] == min)
        {
            for (int j = s; j < i - 1; j++)
                a[j] = a[j + 1];
            a[i - 1] = 0;
            i--;
            s--;  // 需要将循环计数器s回退1,因为删除一个元素后数组的长度会减少1
        }
    }

    for (s = 0; s < i; s++)
        printf("%d\n", a[s]);

    return 0;
}

现在程序可以正确输出删除最小值后的数组元素了。

输入方式不对,这样不会捕获到' '这个结束条件,换一个结束条件