C语言if语句内调用航班校验函数重复执行问题求助
问题原因及修复方案
核心问题根源
- 输入缓冲区残留换行符:
scanf读取数字时只会消耗数字本身,用户输入后敲击的换行符\n会残留在输入缓冲区中。后续调用fgets时,会优先读取缓冲区里残留的换行符,相当于读到了无效空内容,直接触发校验失败进入下一次循环,看起来就像函数被连续执行了两次。 - 混合使用
fgets和scanf时未做缓冲区清理,是这类输入异常的常见诱因。
修复方案
- 新增缓冲区清理函数,用于清空
scanf执行后残留的无效字符:
void clear_stdin() { int c; while ((c = getchar()) != '\n' && c != EOF); }
- 在所有
scanf调用结束后立刻调用该函数清理缓冲区:opt1函数内scanf("%d", &tempNum);后加clear_stdin();main函数内scanf("%d", &opt);后加clear_stdin();
可优化点
- 目前结构体中
code数组长度为5,仅刚好存储FLI-加字符串结束符,若后续需要存储完整航班号建议调整数组长度。 - 校验逻辑可以补充输入长度边界判断,避免输入超长字符导致数组越界。
内容的提问来源于stack exchange,提问作者Velgi
相关产品推荐
相关产品推荐

