2016-08-14 80 views
3

我想从C编程语言中练习1-10。这个想法是创建一个输出等于输入的程序,但是,如果打印选项卡,它应该打印\t而不是实际选项卡。它也建议用backspace/backslash做同样的事情,但我试图让它在向前移动的时候只使用一个标签。c编程语言练习1.10:我的解决方案有什么问题?

我确定一个标签的值为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); 
} 
} 
+2

请注意,您应该编码至少旧的(C99)标准,最好是新的(C11)标准。既不允许'main()'(尽管C89/C90确实是这样做的)。新标准都要求显式指定返回类型 - 如果不打算使用命令行参数,则建议使用“int main(void)”。如果你的编译器没有提醒你这个问题,可以添加警告标记,这样做 - 或者得到一个更好的编译器。 –

+0

谢谢你!我将改变我的代码,以适当的格式开始。 – cfinspan

+0

'main()'函数有两个有效签名这两个签名在当前场景中都有返回类型'int',建议使用:'int main(void)' – user3629249

回答

9

有在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

Putchar只接受单个字符。您输入的“\ t”基本上是两个字符,因为双引号表示它是一个字符串,甚至一个1个字符的字符串也不会算作char。所以尝试执行putchar '\ t')用单引号(表示单个字符)

+2

问题不在于它是两个字符,因为''“'会很好。问题在于OP试图将'char *'传递给一个带有'int'的函数。 – 2016-08-14 00:31:03

3

请注意,您还在您的else语句中错误地将'putchar'拼写为'purchar'。你可以看到编译器正在抱怨它:

C:\Users\*\AppData\Local\Temp\ccC4FPSb.o:tenth.c:(.text+0x18): undefined ref 
erence to `purchar'