在c中跳过文件中的行

时间:2018-05-07 15:18:34

标签: 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.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;
        }           
}

2 个答案:

答案 0 :(得分:3)

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

循环中只需要一个fscanf()

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

附录(2018年5月9日)

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

您还可以在阅读下一行之前致电feof()检查EOF。

答案 1 :(得分:2)

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);
}