在c中跳过文件中的行

问题描述 投票:0回答:2

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

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;
        }           
}
c file scanf
2个回答
3
投票

你对fscanf()的第二次调用读取了第二行数据,覆盖了第一行fscanf()从第一行读取的数据。

你的循环中只需要一个fscanf()

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

附录(2018年5月9日)

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

你也可以在阅读下一行之前调用feof()来检查EOF。


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);
}
© www.soinside.com 2019 - 2024. All rights reserved.