【发布时间】:2017-09-12 15:36:40
【问题描述】:
我的 C 编程书中的一个训练练习如下所示:(翻译自瑞典语)
如果您使用书写/打字终端,有时您会像普通打字机一样,通过退后一行并在单词下方写下 _ 来为单词添加下划线。编写一个程序,将字符串写入变量
s下划线。
我的尝试如下所示:
#include <stdio.h>
int main(void) {
char *s;
printf("input: ");
scanf("%ms", &s);
for (int i=0; s[i] != '\0'; i++) {
printf("%c\b_", s[i]);
}
printf("\n");
return 0;
}
这不起作用,我希望终端输出是:
$> gcc -Wall -std=c99 file.c
$> ./file.c
input: test
test //underlined
$>
但我得到的是:
$> gcc -Wall -std=c99 file.c
$> ./file.c
input: test
____
$>
有人知道怎么做吗?还是这本书有问题?
【问题讨论】:
-
了解ANSI escape codes。
-
如果我的解释正确,您希望从字面上叠加两个字符 - 所以让单个终端单元格同时显示字母字符和下划线,以创建带下划线字符的印象。 Afaik,在大多数 现代 终端上,这是不可能的(可能有一些特定于终端的 hackiness)。虽然
\b是非破坏性的,但打印一个新字符被视为破坏性的。但是,您可以打印带有下划线的 unicode 字符,但您需要一个支持打印 unicode 的终端。 -
如果您通过
less管道它也可以工作(因为传统的寻呼机必须能够通过nroff 显示传统的手册页,传统上使用过度标记,因为它是用于电传打字机的!)