2016-05-01 65 views
0

我有一个文本文件,每行文本文件包含3个整数,如下所示。为什么fgets在第一行之后没有读取?

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

我想你将不得不通过整个文件,直到你达到你想要的线阅读。其他方面你可以做的不多 – x4rf41

+1

“当我改成'fseek(pFile,7,SEEK_SET);'时,它不会返回任何东西。”你确定?应该返回两个换行符。 – MikeCAT

+0

是的,我只是运行程序。它不返回任何换行符。有什么我错过了吗? – Pippi

回答

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); 
} 
相关问题