我想從輸入文件中讀取一系列字母,直到行的末尾,將這些字母存儲在數組中,並返回每行中讀取的字母數。使用fscanf從文件讀取
注意:我需要使用fscanf
,MAX_IN_LENGTH
已經使用#define
來定義,並且輸入文件已經打開並可以讀取。
以下是我有:
for(i=0; i<MAX_IN_LENGTH; i++) {
if (fscanf (input, "%c", &sequence[i]) != '\n')
count++;
}
return count;
我想從輸入文件中讀取一系列字母,直到行的末尾,將這些字母存儲在數組中,並返回每行中讀取的字母數。使用fscanf從文件讀取
注意:我需要使用fscanf
,MAX_IN_LENGTH
已經使用#define
來定義,並且輸入文件已經打開並可以讀取。
以下是我有:
for(i=0; i<MAX_IN_LENGTH; i++) {
if (fscanf (input, "%c", &sequence[i]) != '\n')
count++;
}
return count;
你讀過的fscanf
手冊頁?這是在線 - 看http://linux.die.net/man/3/scanf
你會注意到,它會注意到返回的比較,你正在做
fscanf()
不會返回它掃描像你認爲的字符值。它返回分配的輸入項的數量,如果失敗則返回EOF
。
if (fscanf(input, "%c", &sequence[i]) != EOF) {
if (sequence[i] == '\n') { break; }
count++;
}
這些都會在最初的for循環中進行嗎? – user3303851
@ user3303851是的。第一行檢查掃描是否成功,第二行檢查掃描的字符是否爲新行字符。 –
嗯,好吧。我試過了,它返回的是讀取的總字母數,而不是每個序列讀取的字母數。 – user3303851
這裏是一個可能的解決方案:
#include <stdio.h> /* fscanf, printf */
#include <stdlib.h> /* realloc, free, exit, NULL */
#define MAX_IN_LENGTH 100
int read_line(FILE* strm, char buffer[]) {
char ch;
int items;
int idx = 0;
if(strm) {
while((items = (fscanf(strm, "%c", &ch))) == 1 && idx < MAX_IN_LENGTH) {
buffer[idx++] = ch;
}
}
return idx;
}
int copy_data(char buffer[], int length, char** s) {
static int current_size = 0;
*s = (char*)realloc(*s, current_size + length+1); /* +1 for null terminator */
memcpy(*s+current_size, buffer, length);
current_size += length;
return s ? current_size : 0;
}
int main(int argc, char* argv[]) {
int line = 0;
char buf[MAX_IN_LENGTH] = {0};
char* array = 0;
int idx = 0;
int bytes_read = 0;
if(argc == 2) {
FILE* in=fopen(argv[1],"r");
while((bytes_read = read_line(in, buf)) > 0) {
printf("%d characters read from line %d\n", bytes_read, ++line);
idx = copy_data(buf, bytes_read, &array);
}
if(array) {
array[idx] = '\0';
printf("Complete string: %s\n", array);
free(array);
}
fclose(in);
}
return 0;
}
而你的問題是......? – herohuyongtao
如何逐行讀取每條序列線 – user3303851