2009-02-14 115 views
1

我嘗試寫一些代碼,讀取文件,並忽略換行符(\ n)的,所以到目前爲止,我有:忽略換行符用C

c = fgetc(fp); 
for(int loop = 0; c != EOF; loop++) 
{ 
    if((c != '\n') && (c != '\\')) 
    { 
     buffer[loop] = c; 
    } 
    c = fgetc(fp); 
} 

但它只是不似乎忽略'\ n位(不知道的「\」)

而且比較遺憾的是代碼的佈局,該網站似乎並不喜歡我的版本的Opera :(

編輯: 感謝球員,我已經寫了大約6個小時的編碼,完全忽略了增量,這就是爲什麼我認爲\ n保持不變。

我也不知道\ r,uning Linux,但試圖使跨平臺,所以這是有幫助的。

回答

6

您正在使用哪種操作系統?在Windows上\ n是兩個字符(\ r \ n)。如果您只想忽略換行符,則不需要第二個條件。

但是,另一個問題是,你每次增加循環變量!只有當你添加東西到緩衝區時,你才應該增加'循環'!從(..)中取出'loop ++'並將其添加到緩衝區[loop ++] = c ;.例如,很可能你會在緩衝區中獲得隨機字符而不是'\ n':s,這可能是零。

+0

在Windows上,文件中的文本模式下打開的(即沒有的fopen的mode參數裏的 'B' 字符)將有\ r \ n鏈更改爲\由STDIOñ。 – Doug 2009-02-14 01:57:57

8

試試這個

while ((c = fgetc(fp)) != EOF) 
{ 
    if (c != '\n' && c != '\r') 
    { 
    buffer[loop++] = c; 
    } 
}