C语言问题,急求!!

2024-11-06 19:31:51
推荐回答(2个)
回答(1):

#include 
#include 
void main()
{
void compare(char*arr1, char*arr2, char*arr3);
char a[30], b[30], c[30];
printf("请输入第一个字符串:\n");
scanf("%s", a);
printf("请输入第二个字符串:\n");
scanf("%s", b);
printf("请输入第三个字符串:\n");
scanf("%s", c);
char*p1 = a, *p2 = b, *p3 = c;
compare(p1, p2, p3);
printf("最小的字符串为:%s\n排在中间的字符串为:%s\n最大的字符串为:%s\n", a, b, c);
system("pause");
}

void swap(char* s1, char *s2)
{
char temp[100];
strcpy(temp,s1);//temp = s1
strcpy(s1, s2);//s1 = s2
strcpy(s2, temp);//s2 = temp
}

void compare(char*arr1, char*arr2, char*arr3)
{
if (strcmp(arr1, arr2) > 0)
swap(arr1, arr2);

if (strcmp(arr1, arr3) > 0)
swap(arr1, arr3);

if (strcmp(arr2, arr3) > 0)
swap(arr2, arr3);
}

以上程序完美运行。可以达到你想要的效果。接下来讲讲为什么

首先主方法。

第三个字符串少了一个scanf.我给你加上了

你说的不能输入第二个字符串是不可能出现的情况,除非你用的gets

gets是从输入流中获取。流中没有等待用户输入,输入的内容还是在流中

scanf是从等待用户输入,不管输入流中有没有内容,他都等待。scanf收不了的内容,会进入流中。


在compare方法

这个就是逻辑问题了。

首先交换就出现问题了,

交换两个数据通常需要一个中间变量temp

如以下代码

temp = a

a = b

b= temp

这样才实现两个交换


字符串交换需要用strcpy.  因为字符串不能直接用 = 赋值。

注意是赋值。 初始化可以用等号。如char s[] = "abc"


你的核心问题就是 就是从小到大排序。

你解决的思路是对的。 但是实现出现了问题

不能先写三个strcmp ..在进行交换。你肯定会问为什么?

因为每次比较交换都可能交换字符串。一但交换数据,你预先存的大小关系就被打破了,你是用3个整形变量存的。


基本上回答完毕

-----------------------------

我说下我的思路。如果只是想看到从小到大的字符串,其实很简单,不用交换数组里的数据,只需改变最初指针指向即可。很好实现的,你试试。如果没做出来,说一声,我把代码贴上来。

回答(2):

一、不知道你是怎么输入的,可以提供一下你的运行截图,帮你看看
二、你程序中少了第三个输入语句啊
printf("请输入第一个字符串:\n");
scanf("%s",a);
printf("请输入第二个字符串:\n");
scanf("%s",b);
printf("请输入第三个字符串:\n");
scanf("%s",c); //这里是不是应该加上这个?
char*p1=a,*p2=b,*p3=c;