C++如何覆盖控制台中的字符,将回车符返回行首似乎不起作用

发布于 2024-10-27 07:28:40 字数 674 浏览 6 评论 0原文

我的问题是,如何让数字 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

My question is, how do I get the numbers 10 - 0 to print out on the same line, overwriting each other using either a WIN32 or GNUC compiler in a simple manner like my code below:

This is what I have so far:

#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

But this only prints:

10
9
8
7
6
5
4
3
2
1

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

不语却知心 2024-11-03 07:28:40

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

#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 下不起作用,对我来说听起来像是一个实现问题。

I did some really trivial modification (mostly just to clean it up and make it more readable):

#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;
}

This worked fine with both VC++ and Cygwin. If it's not working under mingw, it sounds to me like an implementation problem.

七分※倦醒 2024-11-03 07:28:40

我建议您使用 ncurses 或其他库来执行此操作,没有标准化的方法。

I recommend you use ncurses or another library for this, there is no standarized way to do it.

2024-11-03 07:28:40

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

Have you tried the backspace '\b' character?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文