C语言用选择法对一个数组进行排序

用选择法对一个数组进行排序

想请问大家为什么这个代码无法输出呢?

#include 
#include 
#include 

int main()
{
     char a[10],t;
    int i,x,min;
    
     gets(a);
     
     for(x=0;x<9;x++)
    {   min=x;
         for(i=x+1;i<10;i++)
         {
           if (a[min]>a[i])
           min=i;
        } 
        t=a[min];
        a[min]=a[x];
        a[x]=t;
    }
    
    puts(a);    
    
return 0;
}

a数组大小是10,但gets(a)输入的字符串长度不一定是10啊。你怎么for循环就对整个数组排序呢?这样肯定将字符串结束符就排序到数组第一个字符了,自然用puts输出啥也没有

根据你提供的代码,我看到你使用了 gets(a) 和 puts(a) 来实现输入和输出。但是需要注意的是,gets() 函数已经被标记为不安全,IDE可能会报警告,因此在输入字符串时建议使用相对安全的 fgets() 函数。同时,在输出字符串时需要确保字符串以空字符 \0 结尾,否则可能出现无法预料的问题。

此外,如果你的输入字符串中包含非数字字符(例如空格、换行符等),排序结果可能会出现异常。因此,建议在输入时检查和过滤非数字字符,以保证程序正常运行。

根据以上建议,你可以尝试修改代码如下:
如果输入的字符串全是数字字符,那么这个程序会将它们升序排列并输出。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h> // 引入ctype.h头文件

int main()
{
    char a[10], t;
    int i, x, min;

    fgets(a, 10, stdin); // 使用相对安全的fgets()函数读取字符串
    a[strcspn(a, "\n")] = '\0'; // 去除多余的换行符

    for (x = 0; x < 9; x++)
    {
        min = x;
        for (i = x + 1; i < 10; i++)
        {
            if (isdigit(a[i]) && a[min] > a[i]) // 检查并过滤非数字字符
                min = i;
        }
        t = a[min];
        a[min] = a[x];
        a[x] = t;
    }

    printf("%s", a); // 在输出字符串时,确保以'\0'结束

    return 0;
}