c-如何在队列中搜索



假设我输入了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;

在这种情况下,函数的用户可以检查是否找到了队列中所需的元素。

最新更新