2014-04-10 117 views
-1

我具有被保持整數像這樣的文件空間分隔:從文件讀取整數與

11_12_34_1987_111_  

其中_表示空格,我想將它們存儲在整數數組具有最大尺寸假設100.我已嘗試此

i=0; 
    while((c=fgetc(f))!=EOF) 
    { 

     fscanf(f, "%d", &array[i]); 
     i++; 
    } 

但打印此數組給我在我的屏幕上的無限值。

+0

http://stackoverflow.com/questions/12505297/reading-comma-seperated-values-from-a-file-storing-in-a-1d-and-2d-array?rq的可能重複= 1 –

+0

'where _表示空格'那麼爲什麼你寫'11_12_34_1987_111'而不是寫'11 12 34 1987 111'。 –

回答

2

fgetc從流f中讀取下一個字符,並將其作爲unsigned char轉換爲int。因此,您正在存儲從流中讀取的字符的(ascii)代碼。

您應該使用fscanffgetssscanf的組合來讀取它們作爲整數,以從流中讀取整數。您可以檢查的fscanf的返回值並繼續讀取文件。這是我的建議。

FILE *fp = fopen("input.txt", "r"); 
int array[100]; 
int i = 0, retval; 

if(fp == NULL) { 
    printf("error in opening file\n"); 
    // handle it 
} 

// note the null statement in the body of the loop 
while(i < 100 && (retval = fscanf(fp, "%d", &array[i++])) == 1) ; 

if(i == 100) { 
    // array full 
} 

if(retval == 0) { 
    // read value not an integer. matching failure 
} 

if(retval == EOF) { 
    // end of file reached or a read error occurred 
    if(ferror(fp)) { 
     // read error occurred in the stream fp 
     // clear it 
     clearerr(fp); 
    } 
} 

// after being done with fp 
fclose(fp); 
+0

它是否適用於如'input.txt'包含格式如「11_12_34_1987_111_222」? –

+0

@Jayesh OP提到'_'代表空格。所以是的,它會起作用。 – ajay

+0

如果我沒有錯,那麼必須從代碼中解析'_'或用'_'來提取每個元素。但無論如何,如果OP想要這個,那就沒問題。 –