#include <stdio.h>
main ()
{
int c;
while ((c = getchar()) != EOF ) {
if (c == '\t') {
while ((c = getchar()) == '\t');
putchar ('\\t');
}
else (c == '\b') {
while ((c = getchar()) == '\b');
putchar ("\\b");
}
else (c == '\\' ) {
while ((c = getchar()) == '\\');
putchar ("\\");
}
putchar(c);
}
}
尝试编译时出现以下错误:
cpytbb.c:在函数'main'中:
之前
cpytbb.c:8:14:警告:多字符常量[-Wmultichar]
cpytbb.c:10:20:错误:预期';'在'{'标记
请注意,第二个错误可能与问题无关。我是新手,我很可能在我的代码中犯了一些错误。
如果需要,我正在使用gcc。
编辑:我正在尝试'打印'\ t \ t \ b和\作为简单文字。例如,如果我点击'退格',它将打印\ b
答案 0 :(得分:0)
您的代码存在一些问题。
首先,您应该使用puts
,而不是putchar
- putchar
用于打印单个字符,而您似乎要打印多个字符。
其次,问题在于行putchar ('\\t')
。那些应该是双引号,而不是单引号。其他putchar
语句是正确的(就报价而言)。
第三,假设您希望代码打印出转义序列(即制表符会导致反斜杠和t打印),putchar ("\\")
中的字符串应为"\\\\"
。根据经验,要打印N
反斜杠,您的字符串中需要2N
反斜杠。
但是,如果您想要实际打印原始字符(即标签字符输入导致打印制表符),则需要保留putchar
调用,但要删除双反斜杠并用单引号替换双引号。
最后,您的缩进建议putchar
调用应位于while
循环内,但在每个while
语句的末尾都有分号。这意味着putchar
调用不是while
循环的一部分。如果不是这样,请删除那些分号。
或许编辑你的帖子,澄清你想要完成的内容将是有益的。
答案 1 :(得分:0)
几个问题:
使用putchar()尝试打印多个字符。反斜杠是一个字符,因此是b
或t
。
在调用putchar()
时使用不同的引号。单引号用于单个字符(转义序列如\b
扩展为单个字符,因此可以,而\\b
是反斜杠的转义序列,后跟另一个字符),双引号用于字符串(即由零值字符(\0
)结尾的一系列零个或多个字符。
即使你修复了这些,你的程序也会出错,因为你的while循环之后你有一个分号。这意味着你有一个空循环(每次循环只执行一个“空语句”),然后在循环之后它只调用putchar
一次。
两个else
块,有条件。 else
不能有条件。您可能希望改为编写else if( ... )
。