c/c++语言开发共享Eclipse / MiniGW中的scanf问题

我试图在eclipse中运行以下代码,但控制台保持空白,直到我停止程序,此时输出“输入下一个值(<= 0退出)2130567168分钟是35509452小时,48分钟。” 一遍又一遍地重复着。

似乎scanf由于某种原因设置了一些默认值…无法弄清楚原因。 在程序停止之前我没有看到任何东西所以我认为它可能与printf没有被冲洗有关,但我确保使用 n强制刷新。

有任何想法吗?

#include  const int MIN_PER_HOUR = 60; // minutes per hour int main(void) { int hour, min, left; printf("Convert minutes to hours and minutes!n"); printf("Enter the number of minutes ( 0){ hour = min / MIN_PER_HOUR; // truncated number of hours left = min % MIN_PER_HOUR; // number of minutes left over printf("%d minutes is %d hours, %d minutes.n", min, hour, left); printf("Enter next value (<=0 to quit)"); scanf("%d", &min); } printf("Done!n"); return 0; } 

    Eclipse的终端模拟器可能不同,并且可以进行更多缓冲。 尝试调用fflush(stdout); 打印输出和scanf()调用之间。

    我将代码移动到Visual C ++中,它按预期工作。 我想我的问题应该是:“为什么eclipse中的终端仿真会被破坏?”

    如果在scanf()的输入中有一个无效字符用于表示整数,则该函数将停止在该字符处, 将其保留在缓冲区中,准备好一次又一次地读取 ,然后再次…

    假设您为第一个scanf()输入了“14分钟”。 该函数读取“14”并在空格处停止。 然后它将14分配给变量min并继续执行程序。

    然后,在循环内,程序执行另一个scanf() 。 这次输入缓冲区已经有了东西 – 即带有空格的“分钟”。 scanf()将读取并忽略该空间,找到一个不能转换为整数的’m’,并在不向变量min赋值的情况下停止并返回值0 。 又一次……又一次……

    因此,您需要做的是在每次scanf()之后清除输入缓冲区。

    你清楚了多少?
    可能就ENTER而言 – 这与fgets()大致相同:)
    例如:

     int ch; scanf("%d", &min); do { ch = getchar(); } while (ch != 'n'); /* empty buffer */ 

      以上就是c/c++开发分享Eclipse / MiniGW中的scanf问题相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/559939.html

      (0)
      上一篇 2021年1月27日
      下一篇 2021年1月27日

      精彩推荐