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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:24:03