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

C语言字符串比较循环无法正常终止问题求助

问题分析与修复

你的代码核心问题是**strcmp的比较结果仅在循环外计算了一次**,用户输入新字符串后,x、y、z的值完全没更新,循环条件一直沿用初始状态的判断结果,自然无法终止。

另外还有几个细节需要修正:

  • fflush(stdin)属于C标准未定义行为,不同编译器处理逻辑不一致,不要用它清理输入缓冲区
  • 如果boardType是字符数组,scanf("%s", &boardType)里的&是多余的,数组名本身就是首地址
  • 需明确boardType的定义,比如设为char boardType[3];,足够存储两个字符加结束符

修正后的完整代码:

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

int main() {
    char boardType[3];
    
    do {
        // 替代fflush(stdin)的缓冲区安全清理方式
        int c;
        while ((c = getchar()) != '\n' && c != EOF);
        
        printf("Which board type would you like? Full Board(FB), Half Board(HB) or Bed & Breakfast(BB)\n");
        scanf("%2s", boardType); // 限制输入长度,防止数组越界
        printf("%s\n", boardType);
    // 每次循环重新比较当前输入的字符串
    } while (strcmp(boardType, "FB") != 0 && strcmp(boardType, "BB") != 0 && strcmp(boardType, "HB") != 0);
    
    return 0;
}

关键改动说明:

  • 将strcmp比较移至循环的while条件中,每次循环都会重新计算当前输入与有效选项的匹配结果
  • 用getchar循环清理缓冲区剩余字符,替代不安全的fflush(stdin)
  • 给scanf添加%2s限制输入长度,避免过长输入导致数组越界
  • 直接使用字符串字面量"FB"、"BB"、"HB"比较,省去多余的数组定义

修改后,输入有效字符串时循环条件会变为假,程序将正常终止循环。

内容的提问来源于stack exchange,提问作者gil.exe_

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 19:46:01