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

C语言条件判断失效求助:空姓名不显示逻辑异常

修复C语言字符串比较的逻辑错误

兄弟,你这里的问题根源是C语言中不能直接用==运算符比较字符串的内容,我来给你拆解清楚:

为什么原来的判断失效?

在C里,st[i].name == "null"这种写法,比较的是st[i].name这个指针的内存地址和字符串常量"null"的存储地址,而不是两个字符串的实际内容。哪怕st[i].name存的内容是"null",只要它的存储地址和常量"null"的地址不一样,这个条件就永远不会成立,自然就跳过了你想要的判断逻辑。

正确的修复方案

要比较字符串内容,必须用C标准库提供的strcmp()函数,步骤如下:

  1. 首先确保代码顶部包含了字符串处理的头文件:
    #include <string.h>
    
  2. 修改你的条件判断语句:
    把原来的:
    if(st[i].name=="null") { break; }
    
    改成:
    // 判断字符串内容是否为"null"
    if(strcmp(st[i].name, "null") == 0) { 
        break; 
    }
    
    👉 补充提醒:如果你的st[i].name有可能是空指针(NULL),直接调用strcmp会导致程序崩溃,这时候要先判断指针是否有效:
    if(st[i].name == NULL || strcmp(st[i].name, "null") == 0) {
        break;
    }
    

修改后的完整代码片段示例

case(4): 
    printf("\n\n\n DISPLAY ALL INFORMATION \n\n"); 
    for(i=0;i<50;i++){ 
        // 修复后的判断逻辑
        if(st[i].name == NULL || strcmp(st[i].name, "null") == 0) { 
            break; 
        } else {
            printf("\n\n\n"); 
            printf(" student name = %s",st[i].name); 
            printf(" \t student id =%d",st[i].id); 
            printf("\n**************************************************************************************"); 
        } 
    } 
    printf(...);

额外说明

strcmp()函数的返回值规则:

  • 返回0:两个字符串内容完全相同;
  • 返回负数:第一个字符串的ASCII值小于第二个;
  • 返回正数:第一个字符串的ASCII值大于第二个。

所以我们用strcmp(...) == 0来精准判断两个字符串内容是否一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:52:55