Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C getline startover_C_For Loop_Getline - Fatal编程技术网

C getline startover

C getline startover,c,for-loop,getline,C,For Loop,Getline,我使用C中的get line函数来读取文件的行。我想在函数上循环,这样我就可以读取文件n次。但出于某种原因,它在后续循环的开始处只读取一次(我认为在某个地方仍然有一个指针指向最后一行)。我如何让它复位 为了让事情更清楚,如果在下面的文件中有100行,那么最大的val将是100行,即使它应该达到300行 谢谢 FILE* fp = myfopen (inf, "r"); char* line = NULL; size_t len = 0; int num=3 int val=0 for (i=

我使用C中的get line函数来读取文件的行。我想在函数上循环,这样我就可以读取文件n次。但出于某种原因,它在后续循环的开始处只读取一次(我认为在某个地方仍然有一个指针指向最后一行)。我如何让它复位

为了让事情更清楚,如果在下面的文件中有100行,那么最大的val将是100行,即使它应该达到300行

谢谢

FILE* fp = myfopen (inf, "r");
char* line = NULL;
size_t len = 0;

int num=3
int val=0

for (i=0;i<num;i++)
{
    while (getline (&line, &len, fp) != -1)
    {  
        val++;   
    }
}
FILE*fp=myfopen(inf,“r”);
char*line=NULL;
尺寸长度=0;
int num=3
int val=0

对于(i=0;i一旦读取超过文件末尾,就必须调用

rewind(fp);

如前所述,您可以使用该功能重新开始,另一个选项当然是将文件的打开/关闭移动到循环中:

FILE* fp; = myfopen (inf, "r");

for (i=0;i<num;i++)
{
    fp = myfopen(inf, "r");
    while (getline (&line, &len, fp) != -1)
    {  
        val++;   
    }
    fclose(fp);
}
FILE*fp;=myfopen(inf,“r”);

对于(i=0;iOr
ftell
进行更多的控制…但是
倒带
更清晰。反复打开和关闭文件会在内核中造成大量不必要的混乱(即使缓存了大量数据结构,仍然是系统调用)@Michael-没有说这是一个好的解决方案,只是说这是另一个解决方案。根据应用程序的不同,更好的方法可能是读取整个文件,然后根据需要从局部变量处理数据