未來線我有一個看起來像這樣的文件:讀取一個文件(在C)
This is the first line in the file
This is the third line in the file
在那裏我有文件(第2行)在一個空行。我想逐行閱讀文件(我使用fgets),但是接下來我想要提前閱讀,只需檢查文件中是否有空行。
但是,我的while fgets
有一個break語句,因爲我的函數只能這樣構成,每次函數調用一次讀取一行文件。
,所以如果我調用該函數:
func(file);
它會讀的第一行,然後打破。
如果我再次調用它,它會讀取第二行再突破,等等
因爲我要實現這種方式,很難預讀,有什麼辦法可以做到這個?
這是我的代碼:
int main(void) {
FILE * file;
if(file == NULL){perror("test.txt"); return EXIT_FAILURE;}
readALine(file);
}
void readALine(FILE * file) {
char buffer[1000];
while(fgets(buffer,sizeof(buffer),file) != NULL) {
//Read lines ahead to check if there is a line
//which is blank
break; //only read a line each FUNCTION CALL
}
}
所以要澄清一下,如果我是整個文件讀取一次(只有一個函數調用),它會是這樣的(這是很容易實現的)。
int main(void) {
FILE * file = fopen("test.txt","r");
if(file == NULL){perror("test.txt"); return EXIT_FAILURE;}
readALine(file);
}
void readALine(FILE * file) {
char buffer[1000];
while(fgets(buffer,sizeof(buffer),file) != NULL) {
if(isspace(buffer[0]) {
printf("Blank line found\n");
}
}
}
但因爲我讀(逐行,每個函數調用)的文件,第二個代碼塊以上是行不通的(因爲我每讀行突破,這我不能改變)。
有沒有一種方法可以使用fseek來實現這個目標?
是的,'fseek'和'ftell'是爲了做這樣的事情。 – usr2564301
如果'fopen'失敗,您的程序報告成功似乎很奇怪。強烈推薦'if(file == NULL){perror(「test.txt」); return EXIT_FAILURE;}' –
我更新了代碼,雖然fopen肯定不會失敗。 – TESTJ