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

