2017-02-20 60 views
-1

我讀Kernighan的Ritchie和有這個字計數程序,所以我想實現我的C字符和行計數程序有什麼問題?

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
char c; 
int i; 
c = getchar(); 
while (c != EOF) 
    i= i + 1; 
printf("%d",i); 
}` 

當我編譯並運行此代碼後,我輸入一些字符有後無輸出。沒有打印號碼,我不明白爲什麼。代碼看起來很好。我也嘗試使用scanf(),但同樣的事情發生。

下一個例子是對輸入中的行進行計數,同樣的問題也在那裏。

+4

請注意,C++不是C. –

+1

如果c!= EOF「while while循環將會無限 –

+3

int i = 0,c; while((c = getchar())!= EOF) i = i + 1;' – BLUEPIXY

回答

7

在你的代碼,當你打

i= i + 1; 

i的初始值是不確定的。所以,整個程序調用undefined behavior。你需要初始化i

詳細說明,i是一個自動局部變量,除非明確初始化,否則內容是不確定的。在這種情況下使用不確定的值將導致UB。

也就是說,char無法保存EOF的值,請將類型更改爲int


之後,你在邏輯上是錯誤的。 getchar()本身並不是一個循環,您需要在while循環體內繼續調用getchar()以更新c的值,用於while中的條件檢查。

+0

oops,是的,我將0賦給了i,但是這並沒有解決問題,也沒有將變量c的類型更改爲int。我編輯了這個問題。 – user127

+0

...和['getchar'](http://www.cplusplus.com/reference/cstdio/getchar/)返回一個「int」,而不是「char」。 –

0

您錯過了初始化:

int i = 0;

2
int main() 

好。不是main()而不是void main()。保持這種方式。

{ 
char c; 

不好。 getchar()返回int

int i; 

不好。未初始化,值不確定。你會增加-7445219,或者可能是腎餡餅,誰知道。

c = getchar(); 

好吧,你已經讀了一個字符。

while (c != EOF) 

但你不能把它比作EOF因爲EOF不適合在char

i= i + 1; 

看起來你忘了在循環體內做些什麼。也許這樣會改變c,這樣你的循環有機會完成。

printf("%d",i); 

建議您在輸出的最後一行添加一個換行符。

} 

這就是所有人。

1

你只需要添加一個inicialization爲 「我」

INT I = 0;