首页 > 解决方案 > 在c中读取文件

问题描述

我正在尝试从 C 中的文件中读取数据,并将数据输入到使用空格作为分隔符的结构的 5 个不同字段中。我有一个超过 70 位不同患者的列表,每个患者的格式都是这样的,

马克克鲁兹 5627 193.0 3.0

约瑟夫·费米内拉 4328 194.0 3.5

埃里维托洛佩兹 7899 195.0 7.9

奥斯汀杜阿尔特 3056 196.0 12.4

雅各布英格兰 1453 197.0 6.7

每条线之间没有新的线,它们都是一个接一个。当我运行这个程序时,它似乎每次从文件的一半开始,每次在“名字:”之前打印一个“)”,并以每个字段都为零的患者结束。

#include <stdio.h>
#include <stdlib.h> 
#include <string.h>

typedef struct node{
    char pln[30];
    char pfn[20];
    int pid;
    float pwt;
    float phgnum;
    struct node* next;
    struct node* back;
}node;

int main(){

    FILE *fp;
    char c;
    node* newptr;
     fp = fopen("info.txt","r");

    if(fp == NULL){
        printf("ERROR File Doesn't exist\n");
    }

    while(c != EOF){

        newptr = (node*)malloc(sizeof(node));
        newptr->back = NULL;
        newptr->next = NULL;
        newptr->phgnum = 0;
        newptr->pid = 0;
        newptr->pwt = 0;
        fscanf(fp,"%s %s %i %f %f",newptr->pfn,newptr->pln,&newptr->pid,&newptr->pwt,&newptr->phgnum);
        c = getc(fp);
        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);

        printf("\n\n\n)");
    }
}

标签: c

解决方案


额外的括号来自printf自身。

    printf("\n\n\n)");
                  ^ right here!  :)

此外,如评论中所述:您有一个未初始化的变量:

$ clang -Wall rfic.c 
rfic.c:18:8: warning: variable 'c' is used uninitialized whenever function 'main' is called
      [-Wsometimes-uninitialized]
  char c;
  ~~~~~^
rfic.c:26:10: note: uninitialized use occurs here
  while (c != EOF) {
         ^
rfic.c:18:9: note: initialize the variable 'c' to silence this warning
  char c;
        ^
         = '\0'
1 warning generated.

你也有内存泄漏。 newptr分配了分配的结果,并且这个指针被这个循环的每次迭代覆盖。


推荐阅读