HDU2016数据的交换输出

问题遇到的现象和发生背景 输入n(n<100)个数,找出其中最小的数,将它与最前面的数交换后输出这些数。输入数据有多组,每组占一行,每行的开始是一个整数n,表示这个测试实例的数值的个数,跟着就是n个整数。n=0表示输入的结束,不做处理。对于每组输入数据,输出交换后的数列,每组输出占一行。
问题相关代码,请勿粘贴截图
#include
#include
#include
int main()
{
    int n,min,i;
    while(scanf("%d",n)!=EOF&&n!=0){
        min=0;
        int *a=malloc(sizeof(int)*n);
        memset(a,0,sizeof(int)*n);
        for(i=0;iscanf("%d",&a[i]);
            min=a[i]for(i=0;iif(a[i]==min)a[i]=a[0];
            printf(i==0?"%d":" %d",i==0?min:a[i]);
        }
        free(a);
        printf("\n");
    }
    printf("END!");
    return 0;
}

运行结果及报错内容 输入4 2 1 3 4,没有输出就结束程序了
我的解答思路和尝试过的方法
我想要达到的结果 不知道哪里出错了,求指导。

修改如下,供参考:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>
int main()
{
    int n, min, i, k;
    while (scanf("%d", &n) == 1 && n != 0) { //scanf("%d", n)  修改
        min = INT_MAX; k = 0;   
        int* a = (int*)malloc(sizeof(int) * n); //int *a=malloc(sizeof(int)*n);  修改
        memset(a, 0, sizeof(int) * n);
        for (i = 0; i < n; i++) {
            scanf("%d", &a[i]);
            min = a[i] < min ? (k = i, a[i]) : min; // 修改
        }
        if (k != 0) {  // 修改
            min = a[k]; a[k] = a[0]; a[0] = min;  // 修改
        }
        for (i = 0; i < n; i++)
            printf(i == 0 ? "%d" : " %d", a[i]); // 修改
        printf("\n");
        free(a);
    }
    printf("END!");
    return 0;
}

min=0;
如果最小值初始化为0,你输入的都是大于0的数,那min会一直是0的。所以min应该初始化为一个很大的值才对,比如min = 0x7FFFFFFF;

这篇文章:HDU - 2016 数据的交换输出 也许能够解决你的问题,你可以看下