我想從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);
}
}
請注意,您應該編碼至少舊的(C99)標準,最好是新的(C11)標準。既不允許'main()'(儘管C89/C90確實是這樣做的)。新標準都要求顯式指定返回類型 - 如果不打算使用命令行參數,則建議使用「int main(void)」。如果你的編譯器沒有提醒你這個問題,可以添加警告標記,這樣做 - 或者得到一個更好的編譯器。 –
謝謝你!我將改變我的代碼,以適當的格式開始。 – cfinspan
'main()'函數有兩個有效簽名這兩個簽名在當前場景中都有返回類型'int',建議使用:'int main(void)' – user3629249