fscanf()只读取一条记录,忽略其余记录
我正在读取记录,使用fscanf并使用while条件来测试它是否读取了预期数量的输入。但是,它在读取第一条记录后停止读取新记录。我看不见他们把我的手指放在上面fscanf()只读取一条记录,忽略其余记录,c,C,我正在读取记录,使用fscanf并使用while条件来测试它是否读取了预期数量的输入。但是,它在读取第一条记录后停止读取新记录。我看不见他们把我的手指放在上面 #include <stdio.h> #include <stdlib.h> //STRUCTURE typedef struct{ char name[20]; int age; float highBP; float lowBP; float riskFactor;
#include <stdio.h>
#include <stdlib.h>
//STRUCTURE
typedef struct{
char name[20];
int age;
float highBP;
float lowBP;
float riskFactor;
} patient;
patient *pRecords[29];
int counter = 0;
int main(int argc, char **argv)
{
int i=0;
for(;i<30;i++){
pRecords[i] = (patient *)malloc(sizeof(patient));
}
FILE *fp;
fp = fopen("data.dat", "r");
if(fp == NULL){
printf("cannot open file\n\n");
return 1;
}
while(fscanf(fp, "name:\t%s\nage:\t%d\nbp:\t%f %f\nrisk:\t%f\n\n", pRecords[counter]->name, &pRecords[counter]->age, &pRecords[counter]->highBP, &pRecords[counter]->lowBP, &pRecords[counter]->riskFactor) == 5){
//printf("%d\n",fscanf(fp, "name:\t%s\nage:\t%d\nbp:\t%f %f\nrisk:\t%f\n\n", pRecords[counter]->name, &pRecords[counter]->age, &pRecords[counter]->highBP, &pRecords[counter]->lowBP, &pRecords[counter]->riskFactor));
printf("%s\n", pRecords[counter]->name);
printf("%d\n", pRecords[counter]->age);
printf("%f\n", pRecords[counter]->highBP);
printf("%f\n", pRecords[counter]->lowBP);
printf("%f\n", pRecords[counter]->riskFactor);
counter++;
}
}
定义一个数组,其中包含29个元素的空间
patient *pRecords[29];
然后继续为30个元素赋值
for(;i<30;i++){
pRecords[i] = (patient *)malloc(sizeof(patient));
}
- 行/*1*/:
是数组中的元素(指针)数sizeof pRecords/sizeof*pRecords
- 行/*2*/:
是每个(取消引用的)元素的大小sizeof**pRecords
fscanf
返回代码。第二条和第三条记录中的bp
之后似乎不止一个tab
。我已经检查了格式,tab的位置是正确的。我不知道如何为30条记录分配内存,我有I=0;iInfor(i=0;i<2;i++)
循环将执行两次:一次i
为0,另一次i
为1。在循环中,i
将在0、1、2、…、28、29之间变化,循环次数为30次
for(;i<30;i++){
pRecords[i] = (patient *)malloc(sizeof(patient));
}
patient *pRecords[29];
for (size_t i = 0; i < sizeof pRecords / sizeof *pRecords; i++) { /* 1 */
pRecords[i] = malloc(sizeof **pRecords); /* 2 */
}