急急!帮忙!C语言题目困惑!

来源:百度知道 编辑:UC知道 时间:2024/06/13 22:28:48
看看我错在哪了谢谢指出啊!写一个函数:用“起泡法”对输入的10个字符按由小到大的顺序排列!!#include"stdio.h"
void main()
{
void range(char b[],int n);
char a[10];
int i=10;
gets(a);
range(a,i);
puts(a);
putchar('\n');
}
void range(char b[],int n)
{
int i,j,t;
for(j=n;j>0;j--)
for(i=0;i<j;i++)
if(b[i]>b[i+1])
{
t=b[i];
b[i]=b[i+1];
b[i+1]=t;
}
}

楼上的,第一个是申明,因为函数是在后面定义的

for(j=n;j>0;j--)
改成for(j=n-1;j>0;j--)
因为只需要比较9次,j=n的话,会出现b[10],超界

#include <stdio.h>
#include <string.h>
void main()
{
void range(char b[],int n);
char a[10];
//int i=10; //必须输入字符10个,不好控制无需如此
gets(a);
range(a,strlen(a)); //使用strlen函数即可
puts(a);
putchar('\n');
}
void range(char b[],int n)
{
int i,j,t;
for(j=n-1;j>0;j--) //是从n-1开始,n超过了范围
for(i=0;i<j;i++)
if(b[i]>b[i+1])
{
t=b[i];
b[i]=b[i+1];
b[i+1]=t;
}
}

void range(char b[],int n); /*函数定义应该在这里,而不是再main函数里面*/

void main()
{
//void range(char b[],int n);
char a[10];
int i=10;
gets(a);
range(a,i);
puts(a);
putchar('\n');
}
void range(char b[],int n)
{
int i,j,t;
for(j=n;j>0;j--)
for(i=0;i<j