如何正确理解回车(又称\ r)?

问题描述 投票:4回答:2

我在网上看到了这个回车示例,说明了加载效果,但是我无法正确理解它。为什么必须是2 \rLoading而不是1?有人可以向我解释吗?

for (int j = 0; j < 3; j++) {
  cout << "\rLoading   \rLoading";
  for (int i = 0; i < 3; i++) {
    cout << ".";
    sleep(300);
  }
}
c++ loops carriage-return
2个回答
5
投票

第一部分

\rLoading____

被打印为在行的开头具有字符串“ Loading”和三个空格。然后,下一个回车将光标设置到行的开头。然后

Loading

被再次打印,但是光标现在直接位于单词之后的三个空格中的第一个空格处。现在在这里:

for (int i = 0; i < 3; i++) {
  cout << ".";
  sleep(300);
}

三个点以300秒的间隔打印到三个点所在的位置。

整个过程重复了三遍,所以第一个“加载”的三个空白的主要目的是从上一次迭代中删除点。


1
投票

同意@Ctx以下是经过优化的代码,可以直接在现代x86和linux计算机上编译并运行它们。您可以自己修改并尝试。

#include <iostream>
#include <unistd.h>

int main(int argc, char* argv[]) {
  for (int j = 0; j < 3; j++) {
    std::cout << "\rLoading   \rLoading" << std::flush;
    for (int i = 0; i < 3; i++) {
      std::cout << "." << std::flush;
      sleep(1);
    }
  }
  std::cout << std::endl;
  return 0;
}

两次促销:

  • 需要std :: flush否则您将看不到效果
  • 300秒太长-> 1秒
© www.soinside.com 2019 - 2024. All rights reserved.