You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

removeNameCard函数中字符串比较逻辑失效问题求助

解决C语言中字符串比较的问题:== vs strcmp()

你遇到的是C语言字符串比较的经典坑——用==比较字符串时,实际对比的是内存地址而非内容。哪怕两个字符串看起来完全一样,只要它们存在不同的内存区域,==就会返回假,直接跳过你的if判断逻辑。

问题根源拆解

在你的代码里:

if (value == inputRecord[x].personName)

value是局部字符数组,inputRecord[x].personName是结构体中的字符数组,二者的内存地址完全不同,所以不管内容是否一致,==的结果永远是false。

正确解决方案:使用strcmp()函数

C标准库<string.h>提供的strcmp()函数,专门用来对比两个字符串的实际内容,它的返回规则是:

  • 返回0:两个字符串内容完全相同
  • 返回负数:第一个字符串按ASCII顺序小于第二个
  • 返回正数:第一个字符串按ASCII顺序大于第二个

另外还要处理fgets()的小坑:它会把你输入时按下的换行符\n也读进value数组,这会导致和结构体中没有换行符的personName对比失败,所以需要先把这个换行符剔除。

修改后的完整函数代码

void removeNameCard() {
    char value[20];
    NameCard temp[MAX];
    printf("Enter personName:\n");
    while ((getchar()) != '\n'); // 清空输入缓冲区
    fgets(value, 20, stdin);
    
    // 移除fgets读入的换行符,避免干扰对比
    value[strcspn(value, "\n")] = '\0';

    if (inputRecord[0].nameCardID != 0) {
        int found = 0; // 标记是否找到目标条目
        for (int x = 0; x < MAX; x++) {
            // 用strcmp对比字符串内容,返回0表示完全一致
            if (strcmp(value, inputRecord[x].personName) == 0) {
                // 移动数组元素,覆盖被删除的条目
                for (int j = x; j < MAX - 1; j++) { // 修正循环上限,避免数组越界
                    inputRecord[j] = inputRecord[j + 1];
                }
                inputRecord[MAX - 1].nameCardID = 0;
                I -= 1; // 注意变量名是大写I,和你定义的一致
                printf("The name card is removed\n");
                found = 1;
                break;
            }
        }
        // 循环结束后统一判断是否未找到,避免重复打印提示
        if (!found) {
            printf("The target person name is not in the name card holder\n");
        }
    } else {
        printf("The name card holder is empty\n");
    }
}

额外优化说明

  1. 修复了变量名错误:你定义的是int I;,原代码里的i -=1;会编译报错,已修正为I -=1;
  2. 添加了found标记:避免每次循环不匹配都打印提示,只在整个遍历结束后统一反馈
  3. 修正了删除逻辑的循环上限:j < MAX -1,防止访问inputRecord[MAX]造成数组越界

内容的提问来源于stack exchange,提问作者FDL9

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 20:57:37