C语言 无法验证链接列表的最后一个节点

kdfy810k  于 2023-03-01  发布在  其他
关注(0)|答案(2)|浏览(148)

我正在尝试做一个程序,我使用链表来存储蛋糕的数据,目前我正在做一个添加蛋糕的函数。这个函数将验证一些事情。我想验证,使输入的代码不能与链表中的现有代码相同。下面是函数:

struct cookie
{
    char code[10], name[100];
    int stock, price;
    struct cookie *next;
};

int validateCode(struct cookie *test, char kode[10]){
    int check;
    int flag;
    while(test != NULL){
        check = strcmp(test->code, kode);
        if(check == 0){
            flag = 0;
        }
        else{
            flag = 1;
        }
        test = test->next;
    }
    if(flag == 1){
        printf("%s already exists in the linked list", kode);
    }
    return flag;
}

下面是输出:Output
我试着把while条件改成如下形式:

  • 测试-〉下一个!=空
  • 测试-〉代码!=空

但对我来说都不管用

brccelvz

brccelvz1#

好吧,原来我愚蠢的LOL我找到了解决方案,谢谢你的评论,非常有用的提示

int validateCode(struct cookie *test, char kode[10]){
        int check;
        int flag;
        while(test != NULL){
            check = strcmp(kode, test->code);
            if(check == 0){
                flag = 1;
                break;
            }
            else{
                flag = 0;
            }
            test = test->next;
        }
        if(flag == 1){
            printf("%s already exists in the linked list", kode);
        }
        return flag;
    }
nzkunb0c

nzkunb0c2#

如果你想检查一个指定的数据是否已经存在于列表中,那么函数中的while循环应该在列表中找到数据后立即停止迭代。
还要注意,当两个字符串相等时,标准的C字符串函数strcmp返回0,因此如果函数strcmp返回0,则意味着数据存在于列表中。
可以通过以下方式声明和定义函数

int validateCode( const struct cookie *test, const char kode[] )
{
    while ( test != NULL && strcmp( test->code, kode ) != 0 )
    {
        test = test->next;
    }

    return test != NULL;
}

如果数据存在于列表中,则函数返回1,否则返回0
这两个函数参数都应该用限定符const声明,因为指向的数据在函数中没有改变。并且函数不应该输出任何消息。函数的调用者将决定是否输出消息。

相关问题