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

C语言回文判断程序循环跳过输入,是否需要重置对应变量?

故障根因

这是C语言标准输入缓冲区残留导致的典型问题:

  • 调用scanf_s("%d", &decide)读取数字时,函数仅会提取输入流中匹配的整数字符,用户输入数字后按下的换行符\n会残留在输入缓冲区中
  • 下一轮循环执行fgets(string, ARR_SIZE, stdin)时,fgets遇到换行符会直接结束读取,相当于读入了空内容,没有获取用户的新输入,因此直接输出了和上一轮相同的判断结果。
修复方案

在scanf_s读取完重启选项后,增加清空输入缓冲区的逻辑,把残留的换行符和多余字符全部清理掉即可,同时建议每次循环前清空存储字符串的数组,避免旧内容残留干扰结果。

修改后的main函数代码如下:

int main(void)
{
    char string[ARR_SIZE];
    char returnstring[ARR_SIZE];
    int decide;
    int ret;

    do {
        // 每次循环清空数组,避免旧内容残留
        memset(string, 0, ARR_SIZE);
        memset(returnstring, 0, ARR_SIZE);

        printf("Enter a string!\n");
        fgets(string, ARR_SIZE, stdin);

        isAlphabet(string, returnstring);
        smol(returnstring);
        ret = isPalindrom(returnstring);

        if (ret == 1)
            printf("Palindrom!\n");
        else
            printf("Not a Palindrom\n");

        printf("Do you want to restart? Yes = 1, No = 0 ");
        scanf_s("%d", &decide);

        // 新增:清空输入缓冲区残留的所有字符直到换行
        while (getchar() != '\n');
    } while (decide == 1);

    return 0;
}
额外优化提示

你现有代码中isPalindrom函数里的inputString[strlen(inputString)] = '\0'是冗余操作,字符串本身已经以\0结尾,这行代码不会产生实际效果可以删除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:57:05