c - 在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)");
}
}
解决方案
额外的括号来自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
分配了分配的结果,并且这个指针被这个循环的每次迭代覆盖。
推荐阅读
- angular - 在 Angular 中运行“npm run dev:ssr”时出错
- r - 解释分箱散点图 (R) 并计算均值的方差
- angular - ng build 没有在 dist 文件夹中创建新的索引文件
- java - Maven设置编译器源和目标加清单
- flutter - PageTransition 使用 AnimatedBuilder 返回黑屏
- html - 使用 CSS 中的背景图像使图像适合 div
- applescript - 有没有办法在 Applescript 的下一个框中显示用户输入(例如姓名)?示例:你好,吉米
- javascript - 如何在同一段落中同时显示两个 ID 中的两个函数的输出?
- flutter - Flutter - 使用 Freezed 包的序列化不起作用
- android - 在使用 FlutterFragment 时使用 Flutter Engine 重置 FlutterFragment 内容