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_
相关产品推荐
相关产品推荐

