好吧,我有一個輸入文件,可以計算每行中成功的字數和字符數。 當我使用下面的代碼到達行尾時,它退出循環,只讀取第一行。如何繼續下一行輸入以繼續該程序?從文件中讀取輸入C
編輯:我必須單獨分析每一行,所以我不能用EOF
while((c = getchar()) != '\n')
好吧,我有一個輸入文件,可以計算每行中成功的字數和字符數。 當我使用下面的代碼到達行尾時,它退出循環,只讀取第一行。如何繼續下一行輸入以繼續該程序?從文件中讀取輸入C
編輯:我必須單獨分析每一行,所以我不能用EOF
while((c = getchar()) != '\n')
變化'\n'
到EOF
。直到文件結束時,您正在讀取直到文件結尾(EOF是stdio.h中的一個宏,它對應於文件末尾的字符)。
聲明:我對該方法的安全性沒有任何要求。
'\ n'是換行符(換行符) - 字符,因此當到達第一行的結尾時,循環將終止。文件的結尾用文件結尾(EOF)-characte標記。 cstdio(或stdio.h中),其中包含的getchar() - 函數,定義了EOF的常數,所以只是改變而行,以
while((c = getchar()) != EOF)
從man
頁:從「讀取下一個字符流,並將其作爲無符號字符轉換爲整型,或者在文件或錯誤結束時返回EOF。「 EOF
是一個宏(通常爲-1),用於返回指示文件結束的相關函數。你想檢查這是否是你回來的。請注意,getc
返回一個帶符號整數,但該有效值是無符號字符轉換爲整數。如果c是一個有符號的字符,那該怎麼辦
那麼,\ 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)
當然,這可能取決於`C`已宣佈與正確的類型。 – 2011-01-28 23:37:31