求问一个c程问题
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>
typedef struct node * pos;
struct node//创建结构体
{ char* data;
pos next;
};
int main(int argc, char* argv[])
{
int i,j,k,m;
char c,x[19]={0};
FILE *p;
char a[500][19];
p=fopen("F:\\500.txt","r");
if(p==NULL)
printf("fail\n");
else printf("success\n");
for(i=0;i<500;i++)
{
for(j=0;j<18;j++)
{
a[i][j]=fgetc(p);
}
a[i][18]=0;
}//将文件中数据存到数组a中
fclose(p);
for(i=0;i<500;i++)
for(j=i;j<500;j++)
if(strcmp(a[i],a[j])>0)
{ for(m=0;m<18;m++)
{ k=a[i][m];
a[i][m]=a[j][m];
a[j][m]=k;}} //排序
for(j=0;j<500;j++)
printf("%s",a[j]);
pos p1,p2,head,p0;
head=NULL;
p1=p2=(pos)malloc(sizeof(struct node));
for(i=0;i<500;i++)//创建链表
{
if(i==0)head=p1;
else p2->next=p1;
p2=p1;
p1=(pos)malloc(sizeof(struct node));
p2->data=a[i];
}
p2->next=NULL;
free(p1);free(p2);
pos find(char x[], pos h);
void dele(pos p);
printf("请输入你要删除的东西:");
scanf("%s",x);
p0=find(x,head);
printf("%s",p0->data);
dele(p0);
printf("abc");
pos p3;
p3=head;
for (i=0;i<500;i++)
{
printf("%s",p3->data);
p3=p3->next;
}
return 0;
}
pos find(char x[], pos h)
{while((h->next!=NULL)&&(strcmp(h->next->data,x)!=0))
h=h->next;
return h;}
void dele(pos p)
{
p->next=p->next->next;
}
这个程序就是有500行字符串 每个字符串都是18列,先读入文件得到了,然后排个序,接着按照排序结果建立链表,要实现输入某一行将那一行对应的字符串删除。dele死了链表删除,find是找到该行字符串前一行对应的位置,我gets输入的x肯定就是那原来的500行之一,但是为什么find函数里面strcmp就是不起作用呢,每次我试都是直接把while循环执行到了最后一个链表单元,真的是找错找疯了。。。。求大佬指教。。。问题就出在while循环那个strcmp上,可是我不知道为什么错了,为什么比较不出来0的结果。