如下,为自己写的程序,请问怎样才能解决它运行结果一直是“查无此人”的问题?
int main(){
int num,i;
struct js * head, * tmp;
printf("input num:");
scanf("%d",&num);
printf(" 教室号,姓名,性别,职称,教授课程,班级,数目,理论,实验\n");
head=createlist(num);
baocun(head);
int choose;
head=(struct js*)malloc(sizeof(struct js));
head->next=NULL;
char xingming[10];
while(1){
menu();
printf("请输入选择第几个操作:\n");
scanf("%d",&choose);
switch(choose){
case 1:
do{
printf("xingming:\n");
scanf("%s",xingming);
seek(head,xingming);
char sel[5];
printf("\t\t\t是否继续查找(yes or no):");
scanf("%s",sel);
if(strcmp(sel,"yes")==0) continue;
else break;
}while(1);
void seek(struct js * head,char xingming1[10]){
int k=0;
struct js * tmp, * fq;
tmp=head->next;
fq=tmp;
while(fq!=NULL){
if(fq->xingming==xingming1){
k=1;
printf("%d%s%s%s%s%s%d%d%d",fq->jiaoshihao,fq->xingming,fq->xingbie,fq->zhicheng,fq->kecheng,fq->banji,&fq->num,&fq->lilun,&fq->shiyan);
}
fq=fq->next;
}
if(k==0){
printf("\t\t\t\t查无此人\n");
}
}
你的代码中,出现了一个错误。在seek函数中,你使用了==运算符来比较两个字符串,这是不正确的。在C语言中,你应该使用strcmp函数来比较两个字符串的内容。
修改seek函数中的比较语句,将fq->xingming==xingming1改为strcmp(fq->xingming, xingming1) == 0,如下所示:
void seek(struct js *head, char xingming1[10]) {
int k = 0;
struct js *tmp, *fq;
tmp = head->next;
fq = tmp;
while (fq != NULL) {
if (strcmp(fq->xingming, xingming1) == 0) {
k = 1;
printf("%d%s%s%s%s%s%d%d%d", fq->jiaoshihao, fq->xingming, fq->xingbie, fq->zhicheng, fq->kecheng, fq->banji, &fq->num, &fq->lilun, &fq->shiyan);
}
fq = fq->next;
}
if (k == 0) {
printf("\t\t\t\t查无此人\n");
}
}
第38行,字符串的比较需用strcmp()函数,头文件包含:#include<string.h> , 代码修改为:if(strcmp(fq->xingming, xingming1) == 0)
在这里使用了库函数qsort进行排序,qsort是一个通用的快速排序,可以对任意的同类型的数据按照想要的方式排序。函数声明如下,它有4个参数,
1、base – 指向要排序的数组的第一个元素的指针。
2、nitems – 由 base 指向的数组中元素的个数。
3、size – 数组中每个元素的大小,以字节为单位。
4、compar – 用来比较两个元素的函数。这个函数是需要自己实现的。
void qsort(void *base, size_t nitems,\
size_t size, int (*compar)(const void *, const void*))
int cmp(const void *p1, const void *p2) //用名字进行排序
{
Contact* f = (Contact*)p1;
Contact* s = (Contact*)p2;
return strcmp(f->name,s->name);
}
void sort_By_Name(Contact* b,int len)
{
qsort(b,len,sizeof(Contact),cmp);
}
38行中是字符串比较,在C语言中不能直接比较,需要用库函数strcmp进行比较