gpt4 book ai didi

c - 为什么 fgets 在第一行之后不读取?

转载 作者:行者123 更新时间:2023-11-30 17:01:32 24 4
gpt4 key购买 nike

我有一个文本文件,文本文件的每一行包含 3 个整数,如下所示。

8 168 0
10 195 0
4 71 0
16 59 0
11 102 0
...

由于文件很大,我希望使用fseek和fgets编写一个可以返回文件中任意行的函数。继此example ,我写了一个如下所示的函数:

/* puts example : hello world! */
#include <stdio.h>

int main ()
{
FILE* pFile;
char mystring [10];

pFile = fopen ("in/data_3" , "r");
fseek(pFile, 3, SEEK_SET);
if ( fgets (mystring , 10 , pFile) != NULL ){
puts (mystring);
}

fclose (pFile);
}

但是,上述程序返回68 0。当我更改为 fseek(pFile, 7, SEEK_SET); 时,它不会返回任何内容。当我更改为 fseek(pFile, 10, SEEK_SET); 时,它返回 195 0。似乎每行中的字符数不固定,并且换行符不知何故不能返回超过 1 行。如何编写函数,使其在不知道整数大小(可以是 0 到数千)的情况下返回完整的行?

最佳答案

How can I write the function such that it returns a complete line without knowing the size of the integer (which can be 0 to thousands)?

编写一个可以跳过 N 行的函数。

void skipLines(FILE* in, int N)
{
char line[100]; // Make it as large as the length of your longest line.
for ( int i = 0; i < N; ++i )
{
if ( fgets(line, sizeof(line), in) == NULL )
{
// N is larger than the number of lines in the file.
// Return.
return;
}
}
}

然后将其用作:

pFile = fopen ("in/data_3" , "r");
skipLines(pFile, 3);
if ( fgets (mystring , 10 , pFile) != NULL ){
puts (mystring);
}

关于c - 为什么 fgets 在第一行之后不读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36963361/

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