2011-05-09 49 views
1

你好我正在教自己C和通過K & R書,我有一些麻煩(我正在運行OS X)。這是來自第1.5.1節「文件複製」,它應該把一個字符作爲輸入,然後輸出該字符。這裏是代碼:使用getchar()和putchar()的非常簡單的C問題

#include <stdio.h> 

/* -- Copy input to output -- */ 
int main(void) 
{ 
int c; 

c = getchar(); 

while (c != EOF) { 
    putchar(c); 
    c = getchar; 
} 


} 

所以,我認爲我的問題不是與代碼本身,而是與編譯和運行。首先,當編譯我收到以下錯誤

/Volumes/Goliath/Dropbox/C programs/prog1_5_1.c: In function ‘main’: 
/Volumes/Goliath/Dropbox/C programs/prog1_5_1.c:12: warning: assignment makes integer from pointer without a  cast 
/Volumes/Goliath/Dropbox/C programs/prog1_5_1.c:16: warning: control reaches end of non-void function 

然後當我運行輸出文件(終端),它有一個狹小的空間,然後當我輸入了一封信,說我鍵入

然後我打回來

我又換了一條新線。如果我然後點擊一個新的鍵,屏幕開始瘋狂與遍地的問號。

我不確定自己是否合理,但我發現這是一個奇怪的問題。非常感謝您提前

回答

5

第二項任務應該是c = getchar();。通過省略括號,您將getchar函數的地址分配給c,這非常不符合您的要求。

另外,在main的末尾,您需要使用行return 0;或類似的命令以擺脫「控制到達非空函數的結束」警告。

+0

或者,你可以原型主要爲void:'void main(void)' – Mel 2011-05-09 02:07:29

+0

@Mel:與C標準相反。 'main'應該總是返回一個'int'。 – jwodder 2011-05-09 02:08:24

+0

是的,真的,你得到一個編譯器*警告*,但有效的程序。當啓動C時,應該意識到有很多方法可以搞砸。 :) – Mel 2011-05-09 02:15:58

1

您在第二個getchar後缺少括號。

這意味着你將該方法的內存中的位置分配給變量c,這會導致無限循環,因爲它永遠不會等於EOF

2

你錯過了()的第12行的getchar無括號「的getchar」計算的功能,這是地址,爲什麼你得到的指針鑄造到INT警告