我正在尝试搜索c中的链接列表,我可以将其与第一个节点匹配我的搜索字符串但不是下一个任何想法。这是我的代码:
void fnSearchList(struct listnode *ptrH, char strName[50])
{
struct listnode *ptrTemp = ptrH;
int nCount = 0;
// nRet = strcmp(strName, ptrH->arcFirstName);
// printf("%i", nRet);
if(!ptrH)
{
/* Empty List */
printf("\n\nEmpty List \n\n");
}
else
{
while(ptrTemp->ptrNext)
{
nRet = strcmp(strName, ptrTemp->arcFirstName);
if(nRet == 0)
{
printf("The value %s has been located\n", ptrTemp->arcFirstName);
nCount++;
}
ptrTemp = ptrTemp->ptrNext;
}
if(!nCount)
printf("\t\tValue not found within the list\n");
else
printf("\t\tA total of %d were found\n", nCount);
}
printf("The list totals %d\n", fnTotalList(ptrH));
}
我在测试时已标记了一些内容,以确定strcmp
是否正常工作。
答案 0 :(得分:2)
我认为你的while循环应该是:
while (ptrTemp)
否则它看起来不会是列表中的最后一个元素
答案 1 :(得分:1)
检查while
循环的条件应为while(ptrTemp)
而不是while(ptrTemp->ptrNext)
。这是因为您已经通过执行
ptrTemp
更改为指向列表中的下一个节点
ptrTemp = ptrTemp->ptrNext;
因此,您的代码会跳过列表中的最后一个节点,因为lastNode->ptrNext == NULL
为true
。
另请注意,函数strName
的{{1}}参数是fnSearchList
类型的指针,而不是50 char
的数组。你可以把它写成:
char
它们完全一样。
答案 2 :(得分:1)
更改 :
while(ptrTemp->ptrNext)
到 :
while(ptrTemp)