用选择培训法对十个字符按升序排序,排序顺序出现错误。

int i,j,k,t,n;
char sak[N];
printf(" ");
for(i=0;i<N;i++)
scanf("%d",&sak[N]);
for(i=0;i<N-1;i++)
{
k=i;
for(j=i+1;j<N;j++)
if(sak[j]<sak[k]) k=j;
if(k!=i)
{
t=sak[i];
sak[i]=sak[k];
sak[k]=t;
}
}
printf("排序结果为: ");
for(i=0;i<N;i++)
printf("%4d",sak[N]);

#define N 5
int main()
{
    int i,j,k,n;
    char sak[N],t;
    for(i=0;i<N;i++)
        scanf("%c",&sak[i]);
    for(i=0;i<N-1;i++)
    {
        k=i;
        for(j=i+1;j<N;j++)
            if(sak[j]<sak[k]) k=j;
        if(k!=i)
        {
            t=sak[i];
            sak[i]=sak[k];
            sak[k]=t;
        }
    }
    printf("排序结果为: ");
    for(i=0;i<N;i++)
        printf("%4c",sak[i]);
}

scanf("%d",&sak[N]);
改为
scanf("%d",&sak[i]);
话说,排不出个结果来,你不最先打印看看数组里是什么吗

你的问题挺多的,我给你修改了并打上了注释
望采纳

#include<stdio.h>
#include<string.h>

int main() {
    int i, j, k, t, n;
    char sak[10];
    printf(" ");
    scanf("%s", sak);
    n = strlen(sak);
    for (i = 0; i < n - 1; i++) {
        // 保存现在的位置
        k = i;
        // 循环读取后面的
        for (j = i + 1; j < n; j++)
            // 如果现在的位置 大于 后面某个地方就记录进 k
            if (sak[j] < sak[k]) k = j;
        // 现在 k 是 后面的最小值
        // 如果最小值不是现在的位置的话
        if (k != i) {
            // 现在的位置和最小值换位置
            t = sak[i];
            sak[i] = sak[k];
            sak[k] = t;
        }
    }
    printf("排序结果为: ");
    for (i = 0; i < n; i++)
        printf("%4c", sak[i]);
}