2016-08-14 48 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' 
相關問題