c编程语言练习1.10:我的解决方案出了什么问题?

时间:2016-08-14 00:19:47

标签: c

我正在尝试用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);
}
}

3 个答案:

答案 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;)意思是单个字符)