C语言条件判断失效求助:空姓名不显示逻辑异常
修复C语言字符串比较的逻辑错误
兄弟,你这里的问题根源是C语言中不能直接用==运算符比较字符串的内容,我来给你拆解清楚:
为什么原来的判断失效?
在C里,st[i].name == "null"这种写法,比较的是st[i].name这个指针的内存地址和字符串常量"null"的存储地址,而不是两个字符串的实际内容。哪怕st[i].name存的内容是"null",只要它的存储地址和常量"null"的地址不一样,这个条件就永远不会成立,自然就跳过了你想要的判断逻辑。
正确的修复方案
要比较字符串内容,必须用C标准库提供的strcmp()函数,步骤如下:
- 首先确保代码顶部包含了字符串处理的头文件:
#include <string.h> - 修改你的条件判断语句:
把原来的:
改成: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
相关产品推荐
相关产品推荐

