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

C语言if语句内调用航班校验函数重复执行问题求助

问题原因及修复方案

核心问题根源

  • 输入缓冲区残留换行符:scanf读取数字时只会消耗数字本身,用户输入后敲击的换行符\n会残留在输入缓冲区中。后续调用fgets时,会优先读取缓冲区里残留的换行符,相当于读到了无效空内容,直接触发校验失败进入下一次循环,看起来就像函数被连续执行了两次。
  • 混合使用fgets和scanf时未做缓冲区清理,是这类输入异常的常见诱因。

修复方案

  1. 新增缓冲区清理函数,用于清空scanf执行后残留的无效字符:
void clear_stdin() {
    int c;
    while ((c = getchar()) != '\n' && c != EOF);
}
  1. 在所有scanf调用结束后立刻调用该函数清理缓冲区:
    • opt1函数内scanf("%d", &tempNum);后加clear_stdin();
    • main函数内scanf("%d", &opt);后加clear_stdin();

可优化点

  • 目前结构体中code数组长度为5,仅刚好存储FLI-加字符串结束符,若后续需要存储完整航班号建议调整数组长度。
  • 校验逻辑可以补充输入长度边界判断,避免输入超长字符导致数组越界。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:36:03