C语言回文判断程序输入BYE无法终止while循环问题排查
问题根因
- C语言中不能直接用
==或!=比较两个字符串的内容,该写法实际比较的是两个字符串的内存首地址,而非存储的字符内容,因此原代码的退出判断永远不会触发。 - 原代码的循环判断逻辑在读取用户输入之前,首次判断时字符数组
ch未初始化,存在未定义行为。 - 需求约定的退出触发词为大写
BYE,原代码判断条件写的是小写bye,大小写不匹配也会导致退出逻辑不生效。
修复后完整代码
#include <stdio.h> #include <string.h> int main(void) { char ch[20]; while (1) { // 限制读取长度避免数组越界 scanf("%19s", ch); // 用strcmp比较字符串内容,返回0代表完全相等 if (strcmp(ch, "BYE") == 0) { break; } int n = strlen(ch); int c = 0; int i; for (i = 0; i < n / 2; i++) { if (ch[i] == ch[n - i - 1]) c++; } if (c == i) { printf("1\n"); } else { printf("0\n"); } } return 0; }
关键修改说明
- 调整循环逻辑:先读取用户输入,再判断是否为退出指令,避免访问未初始化的数组内容
- 替换字符串比较逻辑:使用
string.h库提供的strcmp()函数做字符串内容比较,符合C语言字符串操作规范 - 修正退出触发词:匹配需求要求的大写
BYE作为退出条件 - 增加输入长度限制:
%19s限制最多读取19个字符,预留末尾\0的存储空间,避免数组溢出 - 优化输出格式:每个结果后增加换行,避免输出内容粘连
内容的提问来源于stack exchange,提问作者Zuhriddin Ganiev
相关产品推荐
相关产品推荐

