2011-01-28 151 views
0

好吧,我有一個輸入文件,可以計算每行中成功的字數和字符數。 當我使用下面的代碼到達行尾時,它退出循環,只讀取第一行。如何繼續下一行輸入以繼續該程序?從文件中讀取輸入C

編輯:我必須單獨分析每一行,所以我不能用EOF

while((c = getchar()) != '\n') 

回答

5

變化'\n'EOF。直到文件結束時,您正在讀取直到文件結尾(EOF是stdio.h中的一個宏,它對應於文件末尾的字符)。

聲明:我對該方法的安全性沒有任何要求。

+0

當然,這可能取決於`C`已宣佈與正確的類型。 – 2011-01-28 23:37:31

2

'\ n'是換行符(換行符) - 字符,因此當到達第一行的結尾時,循環將終止。文件的結尾用文件結尾(EOF)-characte標記。 cstdio(或stdio.h中),其中包含的getchar() - 函數,定義了EOF的常數,所以只是改變而行,以

 
while((c = getchar()) != EOF) 
0

man頁:從「讀取下一個字符流,並將其作爲無符號字符轉換爲整型,或者在文件或錯誤結束時返回EOF。「 EOF是一個宏(通常爲-1),用於返回指示文件結束的相關函數。你想檢查這是否是你回來的。請注意,getc返回一個帶符號整數,但該有效值是無符號字符轉換爲整數。如果c是一個有符號的字符,那該怎麼辦

0

那麼,\ n字符實際上是兩個字符的組合,兩個字節: 第13個字節+第10個字節。你可以嘗試像,

int c2=getchar(),c1; 
while(1) 
{ 
    c1=c2; 
    c2=getchar(); 
    if(c1==EOF) 
    break; 
    if(c1==(char)13 && c2==(char)10) 
    break; 

    /*use c1 as the input character*/ 
} 

這應該測試,如果兩個輸入的字符進行正確的對聯(13,10)