如何打印每个人的信息并计算文件中列出的平均年龄和人数

时间:2014-12-08 19:49:47

标签: c file struct

我无法从文件中读取结构。我对如何打印每个人的信息并计算文件中列出的平均年龄和人数感到困惑。

#include <stdio.h>
#include <string.h>
/*
The content of the file:
John
male
19
Bill
male
20
Mary
Female
20
*/
struct person
{
    char name[50];
    char sex;
    int age;
};

int main()
{
    struct person coll;
    FILE *fp;
    fp=fopen("person.txt","r");
    if(fp==NULL)
    {
        printf("Cannot open");
        return 1;
    }
    fscanf(fp,"%c %c %d",&coll.name[50],&coll.sex,&coll.age);
    printf("%c",coll.name[50]);
    printf("%c",coll.sex);
    printf("%d",coll.age);
    return 0;
}

2 个答案:

答案 0 :(得分:0)

更改

 fscanf(fp,"%c %c %d",&coll.name[50],&coll.sex,&coll.age);

fscanf(fp,"%s %c %d",coll.name,&coll.sex,&coll.age);

printf("%c",coll.name[50]);

printf("%s\n",coll.name);

建议检查fscanf()的返回值[或者,主要是每个库函数],以确保成功执行。

接下来,要count the average age and numbers of people listed in the file.,您需要定义一个struct person数组,并使用循环读取文件的内容。然后,根据逻辑,您需要计算平均值并打印出来。


编辑:

根据文件的输入,您应该将结构修改为

struct person
{
    char name[50];
    char sex[7];  //to hold "male" or "female", not "m" or "f"
    int age;
};

以及相应的读取和打印语句。

fscanf(fp,"%s %s %d",coll.name,coll.sex,&coll.age);   //should check the return value ==3

printf("%s\n",coll.name);
printf("%s\n",coll.sex);

答案 1 :(得分:0)

已经给出的答案是正确的。

您正在使用"%c"(字符)说明符作为名称。这应该是"%s"(字符串)说明符。有关说明符的详细信息,请参阅此页面上的表格link

请注意,在您的文件内容中,性是一个单词,而在您的代码中是char。阅读第一个字母应该可以正常工作,但也许不希望您想在终端中看到。

我不确定fscanf是否读过一行,所以我无法帮助你。但是你需要实现某种循环来读取文件的其余部分。

我的第一篇文章:-)希望它有所帮助。