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

C语言查询姓名是否在数据库时if判断始终为false问题求助

问题原因

  • 错误使用==比较字符串:C语言中==作用于字符数组时,实际对比的是两块内存的首地址,而非字符串内容。name和DB[i]属于不同的内存空间,首地址永远不相等,因此判断永远返回false。字符串内容比较需要使用<string.h>头文件提供的strcmp()函数,函数返回0时代表两个字符串完全一致。
  • fgets()会保留输入末尾的换行符:用户输入结束按下回车后,fgets()会将换行符\n一并存入name数组的末尾,导致即使输入内容和数据库一致,比对也会失败,需要手动移除末尾的换行符。

修正后完整代码

#include <stdio.h>
#include <string.h>

int main() {
    char DB[][50]={"ahmed alla","Shady Ibrahim","Sara Sedky","Mohamed Ezz"};
    char name[50];
    printf("请输入你的姓名:");
    fgets(name,50,stdin);
    // 移除fgets读取到的末尾换行符
    name[strcspn(name, "\n")] = '\0';
    int flag=1;
    for(int i=0;i<4;i++)
    {
        if(strcmp(name, DB[i]) == 0)
        {
            flag=0;
            printf("welcome %s \n",name);
            // 匹配到后直接跳出循环,无需多余遍历
            break;
        }
    }
    if(flag)
    {
        printf("sorry your name is not in the DB!");
    }
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:06:00