none
控制台运行顺序困惑! RRS feed

  • 问题

  • 我用VC6.0在控制台写了如下代码:

    int main()
    {
     cout<<"请输入时间(分钟):";
     cin>>i;

     while(true)
     {
      if (i>0)
      {
       cout<<"倒计时:"<<i<<"分";
       Sleep(1000*60);
       i-=1;
      }
      else
      {
       cout<<"正在关机!";
       system("shutdown -s -t 0");
       break;

      }
     }
     return 0;
    }

     

    可效果却出乎我意料,当我随便输入一个数字。例如“5”时,它不会先执行  cout<<"倒计时:"<<i<<"分";而是执行后一句的

    sleep函数。我郁闷老久!求高手解答啦!

    2012年2月2日 2:14

答案

  • 您好!我进行了调试发现,当我输入大于0的值时,确实有运行那句cout语句,不过却没有在控制台显示。后面的sleep函数与i-=1;
    都执行了。一切都很正常,不过就是没有显示cout语句中的文字。
    • 已标记为答案 yshkcj 2012年2月2日 14:48
    2012年2月2日 14:15

全部回复

  • 您是怎么知道它没有执行cout语句而是执行后一句Sleep函数的呢?
    应该先cout那条语句,然后再执行Sleep语句.


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    2012年2月2日 4:57
    版主
  • 汗,是我弄错了。不过为什么我输入了一个大于0的数,不会执行  cout<<"倒计时:"<<i<<"分";?

    2012年2月2日 8:50
  • 您可以Debug下F10单步执行就会很清楚了


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    2012年2月2日 10:42
    版主
  • 您好!我进行了调试发现,当我输入大于0的值时,确实有运行那句cout语句,不过却没有在控制台显示。后面的sleep函数与i-=1;
    都执行了。一切都很正常,不过就是没有显示cout语句中的文字。
    • 已标记为答案 yshkcj 2012年2月2日 14:48
    2012年2月2日 14:15

  • 我查了下,相关资料。因为cout是把字符送到输出缓冲区,而不是直接输出。而缓冲区只有在满或者被清空的情况下输出数据。所以程序直到for循环结束,才一次性输出了缓冲区的所有数据。用flush函数就OK了。

    2012年2月2日 14:49