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