C语言初学者,求大神看一下这个程序问题出在哪里?

编写函数fun,对长度为7个字符的字符串,除首、尾字符外,将其余5个字符按降序排列。例如,原来的字符串为CEAedca,排序输出为EedcEAa#include<stdio.h>#include<string.h>void fun(char a[7]){ int i,j; char t; for (i = 1; i <= 5;i++) for (j = 1; j <= 5 - i;j++) if (a[j] < a[j + 1]) { t = a[j]; a[j] = a[j + 1]; a[j + 1] = t;//冒泡排序// }}void main(){ char a[7]; int i; gets_s(a); fun(a); for (i = 0; i <= 6; i++) printf("%c",a[i]);}
2026年09月25日 18:09
有2个网友回答
网友(1):

  该代码有以下错误:

  1 函数参数指定数组

  原因:函数参数无法指定数组,只能指定指针。即使设置为数组,数组的大小会被忽略!

  2 gets_s函数缺少参数,未指定缓冲区大小

  改正:gets_s(a,7)

  3 排序函数序号处理错误

  改正:代码如下:

void func(char a[],int nlen)
{
    if(nlen<=3) return;//三个或者三个以下无需排了,直接返回
    for(int i=1;i        for(int j=i+1;j            if(a[i]                char tmp = a[i];
                a[i] = a[j];
                a[j] = tmp;
            }
}
int main()
{
    char a[9]="";//注意多一个长度,便于字符串显示
    gets_s(a,9);//会将回车换行也放进来,要加大容量接收这个
    func(a,7);
    printf("%s\n",a);//因为最后一个字节必然是0,所以直接显示字符串即可
    return 0;
}

  编译的时候注意:

  项目→属性→常规→字符集→使用多字节字符集

网友(2):

您好这里介绍几个学习C语言必备的东东: 一个开发环境,例如turbo C2.0,这个曾经占据了DOS时代开发程序的大半个江山。但是现在windows时代,用turbo C有感觉不方面,编辑程序起来很吃力,并且拖放,更没有函数变量自动感应功能,查询参考资料也不方便。建议使用Visual C++,这个东西虽然比较大块头,但是一旦安装好了,用起来很方便。 一本学习教程,现在C语言教材多如牛毛,但推荐大家使用《C语言程序设计》谭浩强主编 第二版 清华大学出版社,此书编写的很适合初学者,并且内容也很精到。 除此以外,现在有很多辅助学习的软件,毕竟现在是Window时代了,学习软件多如牛毛,不象我们当初学习,只有读书做题这么老套。我向大家推荐一个“集成学习环境(C语言)”,里边的知识点总结和例程讲解都非常好,还有题库测试环境,据说有好几千题,甚至还有一个