如何在 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),依此类推,直到最后一个数字。
您可以使用 %
(余数)运算符:
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 行等
如果你需要一些东西来计算终端有多少行并适应它,你可以使用 curses
、ncurses
或 pdcurses
。对于 windows,(我认为)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();
}
}
}
这只会初始化 curses
,获取终端中的行数,然后取消初始化 curses
。如果你愿意,你可以留在 curses-mode 并使用 curses
函数来读取和写入终端。这将使您可以控制光标位置和屏幕上打印内容的属性,例如颜色和下划线等。
虽然前面的答案在技术上是正确的,但您只能在固定行数处中断输出,即至少仅使用标准 C++ 库,您无法知道在填充整个行之前可以打印多少行屏幕。您需要求助于特定的 OS API 才能知道这一点。
UNIX 用户可能会告诉您,实际上,您不应该在自己的程序中为此操心。如果你想分页,你应该将输出通过管道传输到命令,例如 less
或 more
,或者将它重定向到一个文件,然后使用文本编辑器查看该文件。
假设我有这个代码:
for (int i=0; i<1000; i++) {
cout << i << endl;
}
所以在控制台中,我们看到结果只打印一次,直到 999。我们再也看不到第一个数字(比如从 0 到 10 或 20),即使我们向上滚动。
如何逐页打印输出?我的意思是,例如,如果每页有 40 行,那么在控制台中我们会看到 0->39,当我们按 Enter 时,将显示接下来的 40 个数字 (40->79),依此类推,直到最后一个数字。
您可以使用 %
(余数)运算符:
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 行等
如果你需要一些东西来计算终端有多少行并适应它,你可以使用 curses
、ncurses
或 pdcurses
。对于 windows,(我认为)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();
}
}
}
这只会初始化 curses
,获取终端中的行数,然后取消初始化 curses
。如果你愿意,你可以留在 curses-mode 并使用 curses
函数来读取和写入终端。这将使您可以控制光标位置和屏幕上打印内容的属性,例如颜色和下划线等。
虽然前面的答案在技术上是正确的,但您只能在固定行数处中断输出,即至少仅使用标准 C++ 库,您无法知道在填充整个行之前可以打印多少行屏幕。您需要求助于特定的 OS API 才能知道这一点。
UNIX 用户可能会告诉您,实际上,您不应该在自己的程序中为此操心。如果你想分页,你应该将输出通过管道传输到命令,例如 less
或 more
,或者将它重定向到一个文件,然后使用文本编辑器查看该文件。