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

C语言回文判断代码输出异常:输入seles却判定为非回文

问题分析与解决

错误根源

你代码里的核心问题是用==比较字符串内容:

  • b == a比较的是两个字符数组的内存首地址,而非字符串的实际内容。a和b是两个独立的数组,内存地址必然不同,所以不管字符串内容是否一致,这个判断都会返回假,导致输出"not palindrome"。
  • 额外隐患:fgets会读取输入末尾的换行符\n,这会导致反转后的字符串开头多一个换行符,比如输入"seles"后,a实际存储的是"seles\n",反转后变成"\nseles",即使修正了比较逻辑,也会因为换行符的存在判断错误。

修正方案

  1. 用strcmp函数比较字符串内容:string.h库提供的strcmp函数会逐字符对比两个字符串,当内容完全相同时返回0,这才是正确的字符串比较方式。
  2. 去除换行符:在使用fgets读取字符串后,手动截断末尾的换行符,避免干扰回文判断。可以用strcspn函数快速完成这个操作。

修正后的完整代码

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

int main() {
    char a[40],b[40];
    printf("character input: "); 
    fgets(a, sizeof(a), stdin);
    
    // 截断fgets读取的换行符
    a[strcspn(a, "\n")] = '\0';
    
    strcpy(b, a);
    strrev(a);
    printf("%s\n", a);
    printf("%s\n", b);
    
    // 用strcmp比较字符串内容
    if (strcmp(b, a) == 0) 
        printf("palindrome");
    else 
        printf("not palindrome");
}

测试验证

输入seles后,程序输出:

seles
seles
palindrome

符合预期判断结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 12:34:57