c语言:在主函数中输入10个等长的字符串。用另一个函数对它们排序。然后再主函数中输出。求高人指点!!

#include<stdio.h>
#include<string.h>
void fun(char a[])
{
int i,j,t;
for(j=0;j<9;j++)
for(i=0;i<9-j;i++)
{
if(strcmp(a[i]>a[i+1])>0)
{ t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
}

}
main()
{
int i;
char a[10];
for(i=0;i<10;i++)
scanf("%c",a[i]);
fun(a);
for(i=0;i<10;i++)
puts(a);
}
这个程序出现以下错与提示:
1 error(s), 2 warning(s)

error C2198: 'strcmp' : too few actual parameters
warning C4047: 'function' : 'const char *' differs in levels of indirection from 'int '
warning C4024: 'strcmp' : different types for formal and actual parameter 1
已经知道答案了!!#include<stdio.h>
#include<string.h>
void fun(char a[][20])
{
int i,j;
char t[20];
for(j=0;j<9;j++)
for(i=0;i<9-j;i++)
{
if(strcmp(a[i],a[i+1])>0)
{ strcpy(t,a[i]);
strcpy(a[i],a[i+1]);
strcpy(a[i+1],t);
}
}

}
main()
{
int i;
char a[10][20];
for(i=0;i<10;i++)
scanf("%s",a[i]);
fun(a);
for(i=0;i<10;i++)
puts(a[i]);
}


第1个回答  2013-01-18
#include <string.h>
void sort(char *str[])
{
char *temp;
int i,j,k;
for (i=0;i<9;i++)
{
for (j=0;j<9-i;j++)
{
if (strcmp(str[j],str[j+1]) > 0)
{
temp=str[j];
str[j]=str[j+1];
str[j+1]=temp;
}
}
}
}
int main()
{
int i;
char *str[]={"thisisaboy","a","bsd","ad","sdfasdf","sdfaw","adf","adf","sdfa","adsffe"};
sort(str);
for (i=0;i<10;i++)
printf("%s\n",str[i]);
}
第2个回答  推荐于2017-12-16
if(strcmp(a[i]>a[i+1])>0)
这个地方错了,应为if(strcmp(a[i],a[i+1])>0)
strcmp是比较两个字符串的大小,各式为strcmp(ch1,ch2)追问

我改了,但是提示的问题更多???什么情况??

追答

大哥,你的题目是要输入十个等长的字符串,而你的if(strcmp(a[i]>a[i+1])>0)
这一句是比较一个字符,不是字符串的,strcmp是比较字符串的,所以错了。那个你的
for(i=0;i<10;i++)
scanf("%c",a[i]); //取地址符号都没有的,错了哈,加上&
希望可以帮助到你,还有疑问请追问

追问

我都改好了,但是在运行时我还没输入完,它就弹出程序停止运行的提示?这又是怎么回事你知道么?

本回答被提问者和网友采纳
第3个回答  2011-05-19
你输入的是十个字符吧,strcmp(a[i]>a[i+1])>0不用strcmp,那是比较字符串的,字符直接比就行,不用那个strcmp追问

题目就是要比较字符串啊??