如何仅使用文件指针正确遍历C循环

时间:2015-10-23 07:24:01

标签: c file loops pointers while-loop

我在c中创建一个逐行读取的程序,并对每行的元素进行一些操作。我正在调用我的read_row函数。

while(filePointer!=NULL)
{
        int result=readRow(filePointer,headerRow,lineRow);
        printf("The value of  row is |%d|\n",result);
}

在我的read_row函数中,我使用get c遍历该行。

 cc=getc(fp);
    while((cc!='\n') && (cc!= EOF))
    {

            *line=cc;
            line++;  
            if(cc==',')
            {
                counterr++;
            }
            cc=getc(fp);

    }  

    if(cc==EOF)
    {
        fp=NULL;
    }

我正在尝试遍历所有行。但是,这个循环是无限的,因为文件指针永远不会变为null。如果cc等于EOF,我试图将文件指针设置为null。但是,这根本没有帮助。因此,请解释我应该如何正确终止该循环。我相信'\ n'在EOF之前出现。因此,文件指针不会变为null。我必须使用Pointer文件来完成它,因为我已经基于该逻辑创建了一个非常大的程序。而且,我只能找到使用fgets()等方法遍历的例子。

3 个答案:

答案 0 :(得分:7)

当您将指针传递给函数然后更改它时,实际上是在更改该指针的副本,而不是指针本身。你需要传递一个指向指针的指针,这是一个小例子:

int a = 2;
int b = 5;

//note the pointer to pointer:
void foo(int **ptr)
{
    *ptr = &b;
}

int main() {
    int * ptr = &a;
    foo(&ptr);
    printf("%d", *ptr); // prints 5
}

因此,在您的情况下,readRow应接受FILE**,您应将其称为readRow(&filePointer...

答案 1 :(得分:0)

您可以使用此功能尝试:

fscanf(fp,"%s\n",out_buffer)

答案 2 :(得分:0)

发布的代码有几个重大错误。

例如设置参数`FILE * fp = NULL;只是改变了实际fp的副本,而不是调用函数中的fp。

FILE * fp参数更改为FILE **fp并修改对函数的调用以匹配:

在修改fp之前,将该参数传递给fclose(*fp),否则文件仍然打开但是指向相关文件描述符的指针被销毁,因此无法关闭该文件。