假设我输入了5名乘客的详细信息,即使我搜索了第4名乘客的细节,我也只能检索到第一名乘客的详情。我需要找到列表中的任何元素。如果current=frontq;搜索时显示第一个元素。
代码:
int search()
{ struct bag *next;
char *n,*f;
current=frontq;
printf("Enter name to be searched:n");
scanf("%s",&n);
printf("nEnter the flight numbern");
scanf("%s",&f);
while((current->name==n)&&(current->fl_no==f))
{
current=current->next;
next++;
}
printf ("n The Searched luggage isn");
printf("%sn",current->name);
printf("%sn",current->dest);
printf("%sn",current->fl_no);
return 0;
}
不确定队列结构包含什么,但假设一些事情。。。。
您比较的是名称指针,而不是名称current->name==n
的内容-请使用strcmp函数。
此外,scanf正在通过n读取提示的内存引用名称,这是未分配的-您需要声明一个缓冲区:
char n[100];
scanf应该是scanf("%s",n);
而不是scanf("%s",&n);
对于初学者来说,这些指针
char *n,*f;
未初始化并且具有不确定的值。
这些扫描的调用
scanf("%s",&n);
scanf("%s",&f);
使用不正确的参数,从而调用未定义的行为。
您需要声明适当大小的数组,例如
char n[N], f[N];
其中N是一些值,并且至少在scanf写入的调用中
scanf( "%s", n);
scanf( "%s", f);
同样在while循环的条件下,写入错误比较指针
while((current->name==n)&&(current->fl_no==f))
你应该写
while( current != NULL &&
!( strcmp( current->name, n ) == 0 && strcmp( current->fl_no, f ) == 0 ) )
循环之后,你应该写
if ( current != NULL )
{
printf ("n The Searched luggage isn");
printf("%sn",current->name);
printf("%sn",current->dest);
printf("%sn",current->fl_no);
}
此外,函数的返回值也没有意义。最好像一样编写返回表达式
return current != NULL;
在这种情况下,函数的用户可以检查是否找到了队列中所需的元素。