2013-06-25 54 views
-1

假設我有一個文件的讀取:閱讀使用C中的fscanf另一個新線

//it may contain more than 2 lines 
12 6 
abadafwg 

現在假設我已經閱讀了第一行是這樣的:

char input[999]; 
while(!feof(fpin)) 
{ 
    fscanf(fpin, " %[^\n]", input); 
    //do something here with these numbers 
    //should do something here to read 2nd line 
} 

這裏是我的問題,我該如何閱讀該文件的第二行? 請幫助QAQ

+0

'fscanf(fpin,「%[^ \ n]」,input)'相同,但是有空格 – chux

+0

什麼是「輸入」? – 0decimal0

+0

@PHIfounder它的字符串 –

回答

0

而不是使用fscanf(fpin, "%[^\n]", input),建議fgets(),因爲這可以防止緩衝區溢出。你可以使用這兩行,然後根據需要進行解析。

if (fgets(input, sizeof(input), fpin) == 0) { 
    // handle error, EOF 
} 
int i[2]; 
int result = sscanf(input,"%d %d", &i[0], &i[1]); 
switch (result) { 
    case -1: // eof 
    case 0: // missing data 
    case 1: // missing data 
    case 2: // expected 
} 
if (fgets(input, sizeof(input), fpin) == 0) { 
    // handle error, EOF 
} 
// use the 'abadfwg just read 
+0

好的......但實際上,該文件超過2行,我不應該知道它包含多少行。我只知道第一行是2個數字,第二行是一個字符串,第三行2個數字等,我需要使用這兩個數字來做一些事情,然後使用這個字符串,所以..... btw,老師推薦我們使用fscanf ... –

+0

將2次讀取放入一個循環中以處理N對線,注意結果== EOF(-1)以指示完成讀取文件。如果你想使用'fscanf()',試試'result = fscanf(fpin,「%d%d」,&i [0],&i[1]);''和result = fscanf(fpin,「%[^ \ n]」 ,input);'。注意前導空格消耗空白,包括之前未讀的'\ n'。 – chux

0

您提供的代碼將讀取程序中的所有行(while循環的每次迭代一行),而不僅僅是第一行。 [我剛剛測試過]