我正在尝试用C编程语言练习1-10。我们的想法是创建一个输出等于输入的程序,但是,如果打印选项卡,它应该打印\t
而不是实际的选项卡。它还建议对退格/反斜杠做同样的事情,但是我试图让它在向前移动之前只使用一个标签。
我确定标签的值为9,所以我想出了这个代码。我很困惑为什么这不起作用 - 这似乎是解决问题的简单方法。如果接收到的字符getchar
的值等于9,则选项卡将以纯文本形式输出\t
。我很乐意被砸在头上因为任何导致我用以下代码吠叫错误树的东西。我看到有些人发布了解决方案here,但我仍然对导致此失败的细微问题感到困惑。
#include <stdio.h>
main(){
int c;
while ((c = getchar()) != EOF) {
if ((c == '\t') == 9) putchar("\t");
else purchar(c);
}
}
带来以下编译错误
tenth.c: In function 'main':
tenth.c:7:35: warning: passing argument 1 of 'putchar' makes integer from pointe
r without a cast
if ((c == '\t') == 9) putchar("\t");
^
In file included from tenth.c:1:0:
c:\mingw\include\stdio.h:645:43: note: expected 'int' but argument is of type 'c
har *'
__CRT_INLINE __cdecl __MINGW_NOTHROW int putchar(int __c)
^
C:\Users\*\AppData\Local\Temp\ccC4FPSb.o:tenth.c:(.text+0x18): undefined ref
erence to `purchar'
collect2.exe: error: ld returned 1 exit status
我也试过
main(){
int c;
while ((c = getchar()) != EOF) {
if (c == '\t') putchar("\t");
else purchar(c);
}
}
答案 0 :(得分:10)
C中的'
和"
之间存在差异:
"\t"
创建一个类型为char[2]
的C风格字符串,其中包含字符\t
(制表符)和\0
(NUL终止字符)。'\t'
是int
类型的单个字符。 putchar
获取int
参数并打印出单个字符。您应该使用(假设您的目标是将消息\t
打印给用户而不是制表符):
putchar('\\'); // Print the backslash (it must be escaped)
putchar('t'); // Print the t
请注意,\
字符很特殊,需要使用额外的\
进行转义(因此'\\'
是int类型的单个\
字符。
答案 1 :(得分:3)
请注意,您在else语句中也错误地将'putchar'拼写为'purchaser'。您可以看到编译器抱怨它:
C:\Users\*\AppData\Local\Temp\ccC4FPSb.o:tenth.c:(.text+0x18): undefined ref
erence to `purchar'
答案 2 :(得分:1)
Putchar只接受一个字符。您已输入&#34; \ t&#34;这基本上是两个字符,因为双引号意味着它是一个字符串,甚至一个1字符的字符串也不算作char。所以尝试用单引号做putchar(&#39; \ t&#39;)意思是单个字符)