4

我的问题是,如何让数字 10 - 0 在同一行打印出来,使用 WIN32 或 GNUC 编译器以简单的方式相互覆盖,如下面的代码:

这是我到目前为止所拥有的:

#include <iomanip>
#include <iostream>
using namespace std;

#ifdef __GNUC__
#include <unistd.h>
#elif defined _WIN32
#include <cstdlib>
#endif

int main()
{

  cout << "CTRL=C to exit...\n";

  for (int units = 10; units > 0; units--)
  {
    cout << units << '\r';
    cout.flush();
#ifdef __GNUC__
    sleep(1); //one second
#elif defined _WIN32
    _sleep(1000); //one thousand milliseconds
#endif

    //cout << "\r";// CR

  }

  return 0;
} //main

但这只会打印:

10 9 8 7 6 5 4 3 2 1

4

3 回答 3

4

我做了一些非常微不足道的修改(主要是为了清理它并使其更具可读性):

#include <iomanip>
#include <iostream>
using namespace std;

#ifdef __GNUC__
#include <unistd.h>
#define pause(n) sleep(n)
#elif defined _WIN32
#include <cstdlib>
#define pause(n) _sleep((n)*1000)
#endif

int main()
{

  cout << "CTRL=C to exit...\n";

  for (int units = 10; units > -1; units--)
  {
    cout << setw(2) << setprecision(2) << units << '\r';
    cout.flush();
    pause(1);
  }
  return 0;
}

这适用于 VC++ 和 Cygwin。如果它不能在 mingw 下工作,对我来说这听起来像是一个实现问题。

于 2011-03-28T00:20:25.390 回答
1

我建议您为此使用 ncurses 或其他库,没有标准化的方法可以做到这一点。

于 2011-03-28T00:14:50.660 回答
0

您是否尝试过退格'\b'字符?

于 2011-03-28T00:22:38.637 回答