如何使用fwrite()函数在文件中一次写入结构成员?

时间:2016-03-31 10:22:46

标签: c data-structures fwrite file-handling

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

struct student{
    char *name;
    char *addr;
    int age;
   int clas;
 }*stu;

 int main()
 {
    FILE *fp;
    int choice,another;
    size_t recsize;
    size_t length;

   struct student *stu=(struct student *)malloc(sizeof(struct student));
   stu->name=(char *) malloc(sizeof(char)*20);
   stu->addr=(char*)malloc(sizeof(char)*20);

   recsize=sizeof(*stu);


           fp=fopen("student.txt","a+");
            if(fp==NULL)
               {
                 fp=fopen("student.txt","w+");
                 if(fp==NULL)
                  {
                    printf("cannot open the file");
                    exit(1);
                  }  
                }

                do
                 {
                   fseek(fp,1,SEEK_END);
                   printf("Please Enter student Details\n");

                   printf("Student Name: ");
                   scanf("%s",stu->name);

                    printf("Address: ");
                    scanf("%s",stu->addr);

                    printf("Class: ");
                    scanf("%s",&stu->clas);

                    printf("Age: ");
                    scanf("%s",&stu->age);                     

                    fwrite(stu,recsize,1,fp);

                    printf("Add another Enter 1 ?\n");
                    scanf("%d",&another);
                   }while(another==1);
                  fclose(fp);
        free(stu);


   }

我在C中有代码,其结构为学生。我试图从用户获取所有结构成员的值。内存分配给结构,两个成员 * name * addr 。当我尝试在文件Student.txt中使用fwrite()函数写入这些值时,它会在文件中显示这样的随机输出(ཀའ㌱䔀8䵁ཀའ䔀䔀1䵁),而不是以可读的形式。请给我提供使用fwrite()函数在文件中编写结构成员的最佳方法。

1 个答案:

答案 0 :(得分:2)

%d

需要使用%s而不是int
printf("Class: ");
scanf("%s",&stu->clas);

printf("Age: ");
scanf("%s",&stu->age);

应该是

printf("Class: ");
scanf("%d",&stu->clas);

printf("Age: ");
scanf("%d",&stu->age);

正如@David Hoelzer在评论中指出的那样:你正在写指针的价值而不是它们包含的内容,改变

struct student{
    char *name;
    char *addr;

struct student{
    char name[20];
    char addr[20];

并删除这些行:

stu->name=(char *) malloc(sizeof(char)*20);
stu->addr=(char*) malloc(sizeof(char)*20);