Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.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中跳过文件中的行_C_File_Scanf - Fatal编程技术网

在c中跳过文件中的行

在c中跳过文件中的行,c,file,scanf,C,File,Scanf,我试图读取文件的内容,将它们插入结构的字段,然后打印出值。但它似乎忽略了患者的一半数据,因为它每次都跳过包含数据的一行 Sophia Jackson 1234 141.0 1.1 Emma Aiden 5432 142.0 1.2 Olivia Lucas 5685 143.0 1.3 Ava Liam 5672 144.0 1.4 Mia Noah 3467 145.0 1.5 Isabella Ethan 8654 146.0 1.6 Riley Mason 2567 147.

我试图读取文件的内容,将它们插入结构的字段,然后打印出值。但它似乎忽略了患者的一半数据,因为它每次都跳过包含数据的一行

Sophia Jackson 1234 141.0 1.1 

Emma Aiden 5432 142.0 1.2

Olivia Lucas 5685 143.0 1.3

Ava Liam 5672 144.0 1.4

Mia Noah 3467 145.0 1.5

Isabella Ethan 8654 146.0 1.6

Riley Mason 2567 147.0 1.7

Aria Caden 6794 148.0 1.8
名称的格式是这样的,只是它们之间不是换行符

while(1) {
        fscanf(fp,"%s %s %i %f %f",newptr->pfn,newptr->pln,&newptr->pid,&newptr->pwt,&newptr->phgnum);
        printf("First Name: %s\n",newptr->pfn);
        printf("Last Name: %s\n",newptr->pln);
        printf("PID: %i\n",newptr->pid);
        printf("Weight: %f\n",newptr->pwt);
        printf("HG1AC: %f\n",newptr->phgnum);

        if( 5 != fscanf(fp,"%s %s %i %f %f",newptr->pfn,newptr->pln,&newptr->pid,&newptr->pwt,&newptr->phgnum)) {
             break;
        }           
}

fscanf()
的第二次调用读取第二行数据,并用第一个
fscanf()
覆盖先前从第一行读取的数据

循环中只需要一个
fscanf()

另外,如何在循环中设置/更改
newptr

附录(2018年5月9日)

您应该在循环中只使用一个
fscanf()
调用。此外,您应该在循环顶部检查该调用的结果,以确定何时达到EOF,从而确定何时终止循环


在读取下一行之前,您还可以调用
feof()
检查EOF。

您对
fscanf()
的第二次调用读取第二行数据,第一次
fscanf()
覆盖先前从第一行读取的数据

循环中只需要一个
fscanf()

另外,如何在循环中设置/更改
newptr

附录(2018年5月9日)

您应该在循环中只使用一个
fscanf()
调用。此外,您应该在循环顶部检查该调用的结果,以确定何时达到EOF,从而确定何时终止循环


在阅读下一行之前,您还可以调用
feof()
检查EOF。

while循环中有2个fscanf函数调用。您考虑第一个显示,第二个调用的结果被忽略了。这意味着您忽略了所有数据的一半

下面将解决这个问题

while(1){

        if( 5 != fscanf(fp,"%s %s %i %f %f",newptr->pfn,newptr->pln,&newptr->pid,&newptr->pwt,&newptr->phgnum)){
             break;
        }           

        printf("First Name: %s\n",newptr->pfn);
        printf("Last Name: %s\n",newptr->pln);
        printf("PID: %i\n",newptr->pid);
        printf("Weight: %f\n",newptr->pwt);
        printf("HG1AC: %f\n",newptr->phgnum);
}

while循环中有2个fscanf函数调用。您考虑第一个显示,第二个调用的结果被忽略了。这意味着您忽略了所有数据的一半

下面将解决这个问题

while(1){

        if( 5 != fscanf(fp,"%s %s %i %f %f",newptr->pfn,newptr->pln,&newptr->pid,&newptr->pwt,&newptr->phgnum)){
             break;
        }           

        printf("First Name: %s\n",newptr->pfn);
        printf("Last Name: %s\n",newptr->pln);
        printf("PID: %i\n",newptr->pid);
        printf("Weight: %f\n",newptr->pwt);
        printf("HG1AC: %f\n",newptr->phgnum);
}

请在您的输入文件中显示newptrIn的定义,data
Sophia Jackson 1234 141.0 1.1 Emma Aiden 5432 142.0 1.2
是否真正用空白中间行分隔?它们不是我正在尝试使用文件中的患者数据创建链接列表。所以希望是使用fscanf读取行,将其插入字段,将患者插入链表,并使用某种终止语句,在循环到达EOF时结束循环。我认为两个scanf就足够了,但是每次跳过一行,基本上会删除一半的数据。有更好的方法吗?请在您的输入文件中显示newptrIn的定义,data
Sophia Jackson 1234 141.0 1.1 Emma Aiden 5432 142.0 1.2
是否真正用空白的中间行分隔?他们不是我在尝试使用文件中的患者数据创建链接列表。所以希望是使用fscanf读取行,将其插入字段,将患者插入链表,并使用某种终止语句,在循环到达EOF时结束循环。我认为两个scanf就足够了,但是每次跳过一行,基本上会删除一半的数据。有更好的方法吗?我正在创建一个病人的链接列表,我已经弄明白了。我只是想知道如何读取文件。我正在使用第二个scaf,所以我知道当EOF是时,有没有更好的方法来做呢?我添加了一个附录来回答你的问题。我正在创建一个患者的链接列表,我已经找到了答案。我只是想知道如何读取文件。我使用的是第二个scaf,所以我知道当EOF是时,有没有更好的方法?我添加了一个附录来回答你的问题。我试图从行中获取数据,将其插入链接列表,然后重新编写新的PTR。所以我需要初始的fscanf来读取数据,当我到达一个不需要fscanf的EOF时,有没有办法终止循环?我试图从行中获取数据,将其插入一个链表,然后重新写入新的PTR。所以我需要初始的fscanf来读取数据,当我到达一个不需要fscanf的EOF时,有没有办法终止循环?