我只是想编写一个程序,输出一系列数字,在控制台屏幕的同一行上互相覆盖。像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
答案 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实现类似效果的链接。