提问人:trangan 提问时间:10/25/2021 最后编辑:trangan 更新时间:10/25/2021 访问量:573
如何在 C++ 中使用 cout 逐页打印?
How to print page by page with cout in C++?
问:
想象一下,我有这样的代码:
for (int i=0; i<1000; i++) {
cout << i << endl;
}
因此,在控制台中,我们看到结果打印一次,直到 999 年。我们再也看不到第一个数字了(比如说从 0 到 10 或 20),即使我们向上滚动。
如何逐页打印输出?我的意思是,例如,如果每页有 40 行,那么在控制台中我们会看到 0->39,当我们按 Enter 键时,将显示接下来的 40 个数字 (40->79),依此类推,直到最后一个数字。
答:
0赞
Ted Lyngmo
10/25/2021
#1
您可以使用 (remainder) 运算符:%
for (int i=0; i<1000; i++) {
std::cout << i << '\n';
if(i % 40 == 39) {
std::cout << "Press return>";
std::getchar();
}
}
这将打印第 0-39 行,然后是第 40-79 行,依此类推。
如果您需要一些东西来计算终端有多少行并适应它,您可以使用 或 。对于 Windows,(我认为)是您应该追求的。curses
ncurses
pdcurses
pdcurses
#include <curses.h>
#include <iostream>
int main() {
initscr(); // init curses
int Lines = LINES; // fetch number of lines in the terminal
endwin(); // end curses
for(int i = 0; i < 1000; i++) {
std::cout << i << '\n';
if(i % Lines == Lines - 1) {
std::cout << "Press return>";
std::getchar();
}
}
}
这只会初始化 ,获取终端中的行数,然后 deinit 。如果需要,您可以保持诅咒模式,并使用函数来读取和写入终端。这将使您可以控制在屏幕上打印的内容的光标位置和属性,例如颜色和下划线等。curses
curses
curses
评论
0赞
trangan
10/25/2021
感谢您的解决方案。但我正在寻找一种适用于不同操作系统、不同分辨率的解决方案。所以我们不能像这样放一个固定的数字。但正如其他人所说,正如我搜索的那样,我们似乎没有使用 C++ 代码解决这个问题......
0赞
Ted Lyngmo
10/25/2021
@trangan “我正在寻找一种适用于不同操作系统、不同分辨率的解决方案。” - 好吧,这并不明显:-)好吧,您可以使用一个库来创建非常便携的东西。pdcurses
1赞
Ted Lyngmo
10/25/2021
@trangan我为此添加了一个可能的解决方案。curses
1赞
trangan
10/30/2021
非常感谢,它奏效了!:)有好的一天!
0赞
Ted Lyngmo
10/30/2021
@trangan不错!很高兴它有所帮助,不客气!
1赞
QuentinC
10/25/2021
#2
虽然前面的答案在技术上是正确的,但您只能在固定的行数处中断输出,即至少仅使用标准 C++ 库,您无法知道在填充整个屏幕之前可以打印多少行。您需要求助于特定的操作系统 API 才能知道这一点。
UNIX 的人可能会告诉你,事实上,你不应该在自己的程序中为此烦恼。如果要分页,只需将输出通过管道传递给 或 等命令,或将其重定向到文件,然后使用文本编辑器查看文件。less
more
评论
0赞
Алексей Неудачин
10/25/2021
|more
在 Windows 上运行,并且在 UNIX 之前在 MSDOS 上运行。从 80 年代初开始.
评论
less