我有一个文本文件,文本文件的每一行包含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到数千)的情况下返回完整的行?
答案 0 :(得分:0)
如何在不知道整数大小(可以是0到数千)的情况下编写函数,使其返回完整的行?
编写一个可以跳过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);
}