我最近发现了Ada编程语言,但这个问题在C编程语言中也存在。换页不能按预期工作。
Ada示例:
with Ada.Text_IO; use Ada.Text_IO;
procedure Main is
begin
New_Page;
end Main;在C中也是如此:
#include <stdio.h>
int main (void) {
printf ("\f");
return 0;
}这两种方法在XTerm和Linux console (都使用zsh)上只产生一个新行。它们应该像Ctrl-L一样清除屏幕。
调用时
# ./main | cat -A我得到了一个
^L但是如果我输入一个
# cat -A并键入a
Ctrl-L我得到了一个
^L也是。
有人知道如何让表单换页作为Ctrl-L组合键工作吗?
谢谢你的帮忙!
发布于 2013-07-25 10:01:39
根据this article的说法,清除屏幕的正确方法是printf("\033[2J"); (假设您的终端支持ANSI转义序列并且是VT100-compatible)。我可以确认这在使用GNOME终端的Linux Mint和使用xterm和PuTTY的Windows上都有效。
^L清除屏幕看起来不像是一种可移植的约定。例如,在带有POSIX shell的HP-UX上,将^L传递给shell不会做任何事情。这看起来更像是bash事件。
打印\f将清除某些终端的屏幕,但不会清除其他终端的屏幕。例如,从Windows登录到Red主机,我可以在PuTTY中使用printf("\f");清除屏幕,但在xterm中不能(在后一种情况下,我会得到一个空行)。
发布于 2013-07-25 23:00:40
我试图编辑@Nobilis的答案来添加一个Ada版本,但我认为当屏幕被清除时,我的编辑丢失了,所以再试一次:
with Ada.Text_IO; use Ada.Text_IO;
procedure Main is
begin
Put (ASCII.ESC & "[2J");
end Main;在一个较大的程序中,您可能需要在它后面加上一个"Flush;“调用,因为上面的调用可能会被I/O包缓冲,而I/O包可能不会意识到这是一个特殊的终端命令。(我想在C中也是一样:fflush(stdout);。)
https://stackoverflow.com/questions/17847252
复制相似问题