程序出错了,我检验发现是运行时套在了一个死循环中,但无从改造,望纠错,如果实在无法下手的话希望能帮忙编写出一个正确的事例。
#include <stdio.h>#include <string.h>
#include <stdbool.h>
#include <stdlib.h>
#define A 128
int main(void)
{
char a[A];
char *pS[A]={NULL};
char *p_string=NULL;
int i=0;
int j=0;
int u=0;
bool answer=false;
printf("输入end结束\n");
printf("请输入文本:\n\n");
while((strcmp(fgets(a,A,stdin),"end\n")!=0)&&(i<A))
{
a[strlen(a)-1]='\0';
pS[i]=(char*)malloc(strlen(a)+1);
if(pS[i]==NULL)
{
printf("内存失败,程序结束\n");
return 0;
}
strcpy(pS[i++],a);
}
while(!answer)
{
for(u=0;u<i;u++)
for(j=0;j<i;j++)
{
if(strlen(pS[u])<strlen(pS[j]))
{
p_string=pS[u];
pS[u]=pS[j];
pS[j]=p_string;
answer=false;
}
}
}
printf("输出如下:\n\n");
for(j=0;j<i;j++)
{
printf(" %s\n",pS[j]);
free(pS[j]);
pS[j]=NULL;
}
return 0;
}
本意是从键盘读入任意个谚语,再将它们以字长顺序由短到长的输出
不用那种连贯比较再输出的,那样顺序并不全对。
主要是逻辑思维理不清啊,望高手们加以改正,谢谢