C指针&;链表

C指针&;链表,c,pointers,linked-list,C,Pointers,Linked List,我正在使用(单个)链表编写一个简单的C员工数据库程序。目前,我正在尝试编写“deletemployee”函数,如下所示 我尝试使用while循环遍历链表,并在当前指针名称字段与用户希望删除的名称匹配时停止。(存储在linestore中。) 出于某种原因,它只是在数据库中不断循环,直到最后。我尝试在每个阶段打印linestore&currptr->name的内容,但它们看起来都是正确的,所以我不知道我做错了什么 任何帮助都将不胜感激 删除员工职能: char *lineptr; char line

我正在使用(单个)链表编写一个简单的C员工数据库程序。目前,我正在尝试编写“deletemployee”函数,如下所示

我尝试使用while循环遍历链表,并在当前指针名称字段与用户希望删除的名称匹配时停止。(存储在linestore中。)

出于某种原因,它只是在数据库中不断循环,直到最后。我尝试在每个阶段打印linestore&currptr->name的内容,但它们看起来都是正确的,所以我不知道我做错了什么

任何帮助都将不胜感激

删除员工职能:

char *lineptr;
char linestore[300];
lineptr = &linestore;

struct Employee *currptr = root;
struct Employee *prevptr = NULL;

fprintf(stderr, "\nPlease enter the EXACT name of the employee to be deleted.\n");
read_line(stdin, lineptr, MAX_NAME_LENGTH);  //linestore function is working (checked)



while ( (currptr->name != linestore) & (currptr != NULL) )
{
  fprintf(stderr, "\n***Searching database...***\n");
  fprintf(stderr, "***The current record is %s", currptr->name);
  prevptr = currptr;
  currptr = currptr->next;
}

if ( currptr->name == linestore )
{

  fprintf(stderr, "\n***Record DELETED.***\n");
}
=
不比较这些值。而是比较指针。对于字符串比较,您需要使用
strncmp
函数


=
不比较这些值。而是比较指针。对于字符串比较,您需要改用
strncmp
函数。

currptr->name!=linestore
currptr->name==linestore


如果不正确,则必须使用strcmp()或strncmp()

currptr->name!=linestore
currptr->name==linestore

如果不正确,您必须使用strcmp()或strncmp()您应该使用的

比较具有特定长度的名称的步骤

if (strncmp (currptr->name, linestore, strLength) == 0 && (currptr != NULL) )
{
}
比较布尔条件时,也应使用&should&&when

比较具有特定长度的名称的步骤

if (strncmp (currptr->name, linestore, strLength) == 0 && (currptr != NULL) )
{
}
当比较布尔条件时,&应该是&

我看到两件事:

1) 您想使用
strcmp()/strncmp()
比较字符串。使用
=
将检查它们是否存储在内存中的同一位置

2) 您可能希望在
while
循环的条件下使用
&&
而不是
&
&
是位and,而
&
是逻辑and。

我看到两件事:

1) 您想使用
strcmp()/strncmp()
比较字符串。使用
=
将检查它们是否存储在内存中的同一位置

2) 您可能希望在
while
循环的条件下使用
&&
而不是
&
<代码>&是按位and,而
&
是逻辑and。

使用and,一般情况下,您应该使用逻辑
&
而不是按位
&

==
=比较你的指针,而不是指针后面的内容(字符)

另外,下次您应该提供完整的代码示例。此处缺少链接列表的实现。。可能您还有另一个错误?

使用,通常您应该使用logial
&
而不是按位
&
来执行操作。
==
=比较你的指针,而不是指针后面的内容(字符)


另外,下次您应该提供完整的代码示例。此处缺少链接列表的实现。。可能您还有另一个错误?

程序中有两个错误

第一个是使用

    strcmp(currptr->name,linestore)
下一个是使用位运算符“&”而不是逻辑And运算符“&&”

   while (strcmp(currptr->name, linestore) && (currptr != NULL))

程序中有两个错误

第一个是使用

    strcmp(currptr->name,linestore)
下一个是使用位运算符“&”而不是逻辑And运算符“&&”

   while (strcmp(currptr->name, linestore) && (currptr != NULL))

您最好在问题中包含一些示例输出。是否确实要将
&linestore
存储在指针中,因为它是指向
整个数组的
指针,不要指向该数组中的
字符
,你最好在问题中包含一些示例输出。你确定要将
&linestore
存储在指针中,因为它是指向整个数组
指针,而不是指向该数组中的
字符
,因此while条件将替换为:while((strncmp(linestore,currptr->name,100)=0&&&(currptr!=NULL))?我的错,我的意思是!=0。@GeorgeLoman关于长度的详细信息,是的。(另外,请记住,您也应该在
if
语句中使用
strncmp
)GeorgeLoman:在尝试查看currptr->name之前,您应该检查currptr是否为NULL,因为NULL->name将使程序崩溃。因此,将该'while'语句中的&&子句的顺序颠倒过来。while条件也将替换为:while((strncmp(linestore,currptr->name,100)=0&(currptr!=NULL))“我的错,我的意思是!=0。@GeorgeLoman禁止关于长度的详细信息,是的。(另外,请记住,您也应该在
if
语句中使用
strncmp
。)GeorgeLoman:在尝试查看currptr->name之前,您应该检查currptr是否为NULL,因为NULL->name将使您的程序崩溃。因此,请颠倒该'while'语句中&&子句的顺序。