C语言 如果在链表中找到匹配项,如何正确打印消息?

qhhrdooz  于 2022-12-03  发布在  其他
关注(0)|答案(1)|浏览(118)

我创建了一个方法,它可以在链表中查找所需的元素并返回其索引:它应该返回索引或不成功的消息,然而,我的程序打印:
代码:

void findVal(int val, myNode *head) {
  myNode *p = NULL;
  p = head;
  int i = 0;
  while (p != NULL){
      if (val == p->val){
        printf("\nthe id is:%d.",i);
        }
      p = p->next;
      i++;
    }
  printf("cannot find the value");
}

结果(我想在一个链表中查找所有的'4',“123456478”):

the id is 3
the id is 6
cannot find the value

然后使用return;这打印了第一个4的id,然后停止循环。问题是我的链表中有两个'4':123456478.

if (val == p->val){
    printf("\nthe id is:%d.",i);
    return;
}

然后我想到了使用一个数组来存储每次找到匹配的索引。在循环之后,如果数组为空,则打印失败消息,但是如果数组不为空,则打印所有索引。
然而,我相信有一个更好的解决办法,所以有没有人能帮忙?

hgqdbh6s

hgqdbh6s1#

你只需要一个'flag'变量,初始设置为零,然后如果/当你找到匹配时将其设置为非零。如果,在循环结束后,该标志仍然为零,则显示“未找到”消息:

void findVal(int val, myNode *head) {
    int found = 0;
    myNode *p = head;
    int i = 0;
    while (p != NULL){
        if (val == p->val){
            printf("\nthe id is:%d.\n",i);
            found = 1; // Set the flag to non-zero.
        }
        p = p->next;
        i++;
    }
    if (found == 0) {
        printf("cannot find the value\n");
    }
}

相关问题