菜鸟求助 输入三个字符串 并按由小到大的顺序输出 请高手帮忙看看我的程序哪里错了

fanqjhust 2015-11-27 12:10:08
#include"stdio.h"
#include"string.h"
#define N 3
void min_max(char *p[], int n)
{
int i, j, k;
char *a;
for (i = 0; i < n - 1; i++)
{
j = i;
for (k = i + 1; k < n; k++)
if (strcmp(p[j], p[k]) > 0)
j = k;
if (j != i)
{
a = p[i];
p[i] = p[j];
p[j] = a;
}
}
}
int main()
{
void min_max(char *p[], int n);
char *a[N];
int i;
printf("please input %d words:\n",N);
for (i = 0; i < N; i++)
scanf("%s", a[i]);
printf("The words are as follows:\n");
for (i = 0; i < N; i++)
printf("%s\n", a[i]);
min_max(a, N);
printf("Then, the words are as follows:\n");
for (i = 0; i < N; i++)
printf("%s\n", a[i]);
return 0;
}
...全文
280 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
fanqjhust 2015-11-29
  • 打赏
  • 举报
回复
好的 谢谢
paschen 2015-11-27
  • 打赏
  • 举报
回复
原因楼上说了,可以这么改:

#include"stdio.h"
#include"string.h"
#define N 3
void min_max(char *p[], int n)
{
	int i, j, k;
	char *a;
	for (i = 0; i < n - 1; i++)
	{
		j = i;
		for (k = i + 1; k < n; k++)
			if (strcmp(p[j], p[k]) > 0)
				j = k;
		if (j != i)
		{
			a = p[i];
			p[i] = p[j];
			p[j] = a;
		}
	}
}
int main()
{
	void min_max(char *p[], int n);
	char *a[N];
	
	int i;
	printf("please input %d words:\n",N);
	for (i = 0; i < N; i++)
	{
		a[i] = (char*)malloc(100);
		scanf("%s", a[i]);
	}
	printf("The words are as follows:\n");
	for (i = 0; i < N; i++)
		printf("%s\n", a[i]);
	min_max(a, N);
	printf("Then, the words are as follows:\n");
	for (i = 0; i < N; i++)
		printf("%s\n", a[i]);
	return 0;
}
fly_dragon_fly 2015-11-27
  • 打赏
  • 举报
回复
char *a[N]; 没地址
paschen 2015-11-27
  • 打赏
  • 举报
回复

#include"stdio.h"
#include"string.h"
#define N 3
void min_max(char *p[], int n)
{
	int i, j, k;
	char *a;
	for (i = 0; i < n - 1; i++)
	{
		j = i;
		for (k = i + 1; k < n; k++)
			if (strcmp(p[j], p[k]) > 0)
				j = k;
		if (j != i)
		{
			a = p[i];
			p[i] = p[j];
			p[j] = a;
		}
	}
}
int main()
{
	void min_max(char *p[], int n);
	char *a[N];

	int i;
	printf("please input %d words:\n",N);
	for (i = 0; i < N; i++)
	{
		a[i] = (char*)malloc(100);
		scanf("%s", a[i]);
	}
	printf("The words are as follows:\n");
	for (i = 0; i < N; i++)
		printf("%s\n", a[i]);
	min_max(a, N);
	printf("Then, the words are as follows:\n");
	for (i = 0; i < N; i++)
		printf("%s\n", a[i]);

	for (i = 0; i < N; i++)
		free(a[i]);
	return 0;
}
paschen 2015-11-27
  • 打赏
  • 举报
回复
引用 5 楼 fanqjhust 的回复:
free(a[i]);应该放在哪里啊 我是新手
可以放return 0; 前面
fanqjhust 2015-11-27
  • 打赏
  • 举报
回复
free(a[i]);应该放在哪里啊 我是新手
  • 打赏
  • 举报
回复
最好最后释放下内存,free(a[i]);
fanqjhust 2015-11-27
  • 打赏
  • 举报
回复
果然高手 是的 太感谢了

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧