简单的c ++循环暂停,但输出非常奇怪!

时间:2011-03-27 19:37:38

标签: c++ loops timer

我只是想编写一个程序,输出一系列数字,在控制台屏幕的同一行上互相覆盖。像10 9 8 7 6等。

我正在使用xcode并在xcode中编译。这输出“10 121469 121468”,我做错了什么?为什么它看起来不那么明显?

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

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

int main()
{

  cout << "Description: This program will show you how much change" << endl;
  cout << "you will need to complete a transaction using a already" << endl;
  cout << "specified denomination" << endl << endl;

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

  for (int units = 10; units > 0; units--)
  {
    cout << units << ' ';
    cout.flush();

#ifdef __GNUC__
    sleep(1); //one second
#elif defined _WIN32
    _sleep(1000); //one thousand milliseconds
#endif

    cout << '/r'; // CR
  }

  return 0;
} //main

3 个答案:

答案 0 :(得分:4)

这一行错了:

cout << '/r'; // CR

这是两个字符,你想要

cout << '\r'; // CR

答案 1 :(得分:4)

我不知道这是否能回答您的回答,但我发现您的CR错了。

cout << '/r'; // CR

是2个字符(这是您在屏幕上打印的12146)。正确的值必须是

cout << '\r'; // CR

答案 2 :(得分:1)

在n * x上,我使用以下ANSI转义码删除当前行并将光标移动到开头。

\033[0F\033[2K

所以你会用以下方式使用它:

cout << "\033[0F\033[2K" << units << endl;

在下一页上,您可以仔细阅读所有细节:

http://en.wikipedia.org/wiki/ANSI_escape_sequences

该页面上还有一个关于如何为Windows实现类似效果的链接。