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

TempleOS中HolyC程序不等待第二个输入?求类似fflush(stdin)的函数

在HolyC中处理输入缓冲区(替代fflush(stdin))

HolyC本身没有和C语言fflush(stdin)完全对应的内置函数,但你可以通过手动读取并丢弃输入缓冲区剩余字符的方式,解决程序不等待第二个数字输入的问题。

问题的核心原因是:当你读取第一个数字和运算符后,输入缓冲区中可能残留了换行符或其他未处理的字符,后续的输入函数会直接读取这些残留内容,而非等待用户的新输入。

自定义缓冲区清空函数

你可以实现一个简单的FlushInput函数来清空输入缓冲区:

VOID FlushInput() {
  CHAR c;
  // 循环读取缓冲区字符,直到遇到换行符或缓冲区为空
  while (KbHit() && (c = GetCh()) != '\n' && c != EOF);
}
  • KbHit():检查输入缓冲区是否有未读取的字符
  • GetCh():从缓冲区读取单个字符

在计算器程序中使用

把这个函数插入到你的输入逻辑中,确保读取第一个输入后清空缓冲区,再读取第二个数字:

INT main() {
  INT num1, num2;
  CHAR op;

  Print("输入第一个数字和运算符(例如:3*):");
  Scan("%d%c", &num1, &op);
  
  // 清空输入缓冲区,避免残留字符干扰后续输入
  FlushInput();

  Print("输入第二个数字:");
  Scan("%d", &num2);

  // 执行计算并输出结果
  switch(op) {
    case '+': Print("%d+%d=%d\n", num1, num2, num1+num2); break;
    case '-': Print("%d-%d=%d\n", num1, num2, num1-num2); break;
    case '*': Print("%d*%d=%d\n", num1, num2, num1*num2); break;
    case '/': 
      if(num2 != 0) Print("%d/%d=%d\n", num1, num2, num1/num2); 
      else Print("错误:除数不能为0\n"); 
      break;
    default: Print("错误:无效运算符\n");
  }
  return 0;
}

VOID FlushInput() {
  CHAR c;
  while (KbHit() && (c = GetCh()) != '\n' && c != EOF);
}

这样修改后,程序就会正常等待你输入第二个数字了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 21:05:05