Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
fscanf()只读取一条记录,忽略其余记录_C - Fatal编程技术网

fscanf()只读取一条记录,忽略其余记录

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;

我正在读取记录,使用fscanf并使用while条件来测试它是否读取了预期数量的输入。但是,它在读取第一条记录后停止读取新记录。我看不见他们把我的手指放在上面

#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;iIn
for(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 */
}