我具有被保持整數像這樣的文件空間分隔:從文件讀取整數與
11_12_34_1987_111_
其中_
表示空格,我想將它們存儲在整數數組具有最大尺寸假設100.我已嘗試此
i=0;
while((c=fgetc(f))!=EOF)
{
fscanf(f, "%d", &array[i]);
i++;
}
但打印此數組給我在我的屏幕上的無限值。
我具有被保持整數像這樣的文件空間分隔:從文件讀取整數與
11_12_34_1987_111_
其中_
表示空格,我想將它們存儲在整數數組具有最大尺寸假設100.我已嘗試此
i=0;
while((c=fgetc(f))!=EOF)
{
fscanf(f, "%d", &array[i]);
i++;
}
但打印此數組給我在我的屏幕上的無限值。
fgetc
從流f
中讀取下一個字符,並將其作爲unsigned char
轉換爲int
。因此,您正在存儲從流中讀取的字符的(ascii)代碼。
您應該使用fscanf
或fgets
和sscanf
的組合來讀取它們作爲整數,以從流中讀取整數。您可以檢查的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);
它是否適用於如'input.txt'包含格式如「11_12_34_1987_111_222」? –
@Jayesh OP提到'_'代表空格。所以是的,它會起作用。 – ajay
如果我沒有錯,那麼必須從代碼中解析'_'或用'_'來提取每個元素。但無論如何,如果OP想要這個,那就沒問題。 –
http://stackoverflow.com/questions/12505297/reading-comma-seperated-values-from-a-file-storing-in-a-1d-and-2d-array?rq的可能重複= 1 –
'where _表示空格'那麼爲什麼你寫'11_12_34_1987_111'而不是寫'11 12 34 1987 111'。 –