【发布时间】:2016-08-16 17:25:36
【问题描述】:
#include <stdio.h>
int main() {
int c;
while ((c = getchar()) != EOF) {
if (c == '\t')
printf("\\t");
else if (c == '\b')
printf("\\b");
else if (c == '\\')
printf("\\\\");
else
putchar(c);
}
return 0;
}
在这种情况下,输入为
hi how are you\doing
我得到一个输出
hi\thow\tare\tyou\\doing
#include <stdio.h>
int main() {
int c;
while ((c = getchar()) != EOF) {
if (c == '\t') {
c = '\b';
printf("\\t");
}
if (c == '\b') {
c = '\b';
printf("\\b");
}
if (c == '\\') {
c = '\b';
printf("\\\\");
}
putchar(c);
}
return 0;
}
当我使用输入运行这个程序时
hi how are you\doing
(大的空格是制表符)
我得到这个输出
hi\t\how\t\are\t\you\doing
代码:
#include <stdio.h>
int main() {
int c;
c = '\b';
putchar(c);
return 0;
}
运行时, 我什么都得不到。没有输出。返回 shell 提示符。
更准确地说,在第一个程序中,我得到了我想要的输出,但在第二个程序中,我在每个 \t 之后得到了反斜杠,但不是在 \ 之后我希望 \\\ 成为输出看看\t 是如何变成\t\ 的,是 '\b' 造成的吗?如果是,它是如何工作的?但如果是这样,为什么在第三个程序中不会发生同样的情况?
在 rasbian 默认 gcc 编译器和适用于 windows 的 mingw msys-gcc 包上运行。
【问题讨论】:
-
'\b'是“退格”。所以你什么也得不到。 -
是的,但是在第一个输出的情况下,我在“\t”之后得到一个“\”,当它应该打印“\\”时它只打印“\”
-
'\\'是一个转义。通常单个'\'是转义序列 的一部分,例如'\b'。放双斜线会破坏转义,将单斜线作为实际输出。与printf中的"%"类似,它通常表示格式规范。如果你真的想要一个百分号,你必须输入"%%"来打败预期的序列。 -
您使用
putchar(c);使用退格键跟随它。 -
抱歉,哪个程序有问题?这个问题本身就令人困惑。我建议你尝试简单的程序。
标签: c gcc output execution input-buffer