gpt4 book ai didi

c - 读取文件中前面的行(在 C 中)

转载 作者:行者123 更新时间:2023-11-30 15:11:50 25 4
gpt4 key购买 nike

我有一个如下所示的文件:

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 来完成此任务?

最佳答案

以无条件中断结束的 while 循环是一个 if 语句,所以我真的不明白为什么你要使用 while 循环。我还假设您不担心单行长度超过 1000 个字符。

Continue 语句跳转到循环的下一次迭代并再次检查条件。

void readALine(FILE * file) {

char buffer[1000];

while(fgets(buffer,sizeof(buffer),file) != NULL) {

if(!isspace(buffer[0]) { //note the not operator
//I'm guessing isspace checks for a newline character since otherwise this will be true also for lines beginning with space
continue; //run the same loop again
}
break;
}

//buffer contains the next line except for empty ones here...


}

关于c - 读取文件中前面的行(在 C 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35397061/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com