首页 > 用户发贴区 > 编程问题提问区 > 读写文件的问题
2007
10-24

主要代码,能够写入但读不出来,对 fwrite和fread的理解还不够, 请高手指点


for( ; ; )
 {
  printf(“\n你想输入一个工程师的信息吗?(Y/N)”);
  test=getch();
   if(tolower(test)==’n')
    break;
   current=(struct Engineer*)malloc(sizeof(struct Engineer));


   if(first==NULL)
    first=current;
   if(previous!=NULL)


    previous->next=current;


   printf(“\n请输入编号:”);
   scanf(“%d”,&current->No);


   printf(“\n请输入姓名:”);
   scanf(“%s”,current->Name);


   printf(“\n请输入性别:”);
   scanf(“%d”,&current->Sex);


   printf(“\n请输入生日(年 月 日):”);
   scanf(“%d %d %d”,&current->Birth.year,&current->Birth.month,&current->Birth.day);


   printf(“\n请输入籍贯:”);
   scanf(“%s”,current->Hometown);


   printf(“\n请输入学历:”);
   scanf(“%d”,&current->Education);


   printf(“\n请输入地址:”);
   scanf(“%s”,current->Address);


   printf(“\n请输入电话:”);
   scanf(“%s”,current->Phone);


   printf(“\n请输入工龄:”);
   scanf(“%d”,&current->WorkYears);


   printf(“\n请输入基本工资:”);
   scanf(“%f”,&current->BaseSalary);


   current->next=NULL;
   previous=current;
   save();


 }
}


 


void save()
{
 FILE *fp;
 fp=fopen(“engineer.txt”,”wb”);
            if(fp==NULL)
    {
        printf(“Canont open the file!\n”);
        exit(1);
    }
            fwrite(first,sizeof(struct Engineer),1,fp);
   
            fclose(fp);
            printf(“成功写入文件!\n”);
}


void read()
{
 FILE *fp1;
 fp1=fopen(“engineer.txt”,”rb”);


 fread(first,sizeof(struct Engineer),1,fp1);
    fclose(fp1);
    }


读写文件的问题》有 5 条评论

  1. xstar 说:

    从键盘获取数据的代码片段没什么问题!!
    不过save和read函数都有问题!没处理读写指针!

    fopen()每次用”wb”或”rb”打开的时候都是从文件开头读写数据的!
    正常的流程应该是!把打开和关闭放在循环外面,里面的读写函数会自动移动读写指针的!
    写!
    [code]
    fp = fopen();

    for(;;)
    {
        fwrite( (void *)current );
        current = current->next;
        if( current == NULL )
        {
            break;
        }
    }

    fclose( fp );
    [/code]

    读!
    [code]
    fp = fopen();

    for(;;)
    {
        current = malloc();
        fread( (void *)current );
        current->next=NULL;
        previous->next = current;
        previous=current;
        if( eof )
        {
             break;
        }
    }

    fclose( fp );
    [/code]

    具体代码自己补全吧!

  2. cen0225 说:

    谢谢!  我去试试

  3. cen0225 说:

    哎~~~我太笨了还是不行,刚接触文件这,希望版主能给全代码,不胜感激

  4. xstar 说:

    注解什么自己加吧,相关函数的使用看手册!这里只给出了代码!
    [code]
    #include <stdio.h>
    #include <stdlib.h>

    #define DBFILE "C:\\student.txt"

    typedef struct _STUDENT {
     int  no;
     char name[ 16 ];
     struct _STUDENT *next;
    } STUDENT;

    STUDENT *head = (STUDENT *)NULL;

    STUDENT demo = { 0, "vcgood.com", NULL };

    void get_link()
    {
     STUDENT *current = (STUDENT *)NULL;
     STUDENT *tmp     = (STUDENT *)NULL;

     for (int icnt = 0; icnt < 10; icnt++)
     {
      current = (STUDENT *)malloc( sizeof( STUDENT ) );
      if (current == (STUDENT *)NULL)
      {
       break;
      }
      current->no   = icnt;
      sprintf( current->name, "[%02d]vcgood.com", icnt );
      current->next = (STUDENT *)NULL;
      if (head == (STUDENT *)NULL)
      {
       head = current;
       tmp  = current;
      } else {
       tmp->next = current;
       tmp = current;
      }
     }
    }

    void free_link()
    {
     STUDENT *current = (STUDENT *)NULL;
     STUDENT *tmp     = (STUDENT *)NULL;

     current = head;
     while (current != (STUDENT *)NULL )
     {
      tmp = current->next;
      free( current );
      current = tmp;
     }

     head = (STUDENT *)NULL;
    }

    void show_link()
    {
     STUDENT *current = (STUDENT *)NULL;

     current = head;
     while (current != (STUDENT *)NULL )
     {
      printf( "%d %s\n", current->no, current->name );
      current = current->next;
     }
    }

    void writetofile()
    {
     STUDENT *current = (STUDENT *)NULL;
     FILE    *fp      = (FILE *)NULL;
     int     isize    = 0;

     fp               = fopen( DBFILE, "wb" );
     if (fp == (FILE *)NULL) return;

     current = head;
     while (current != (STUDENT *)NULL )
     {
      //printf( "%d %s\n", current->no, current->name );

      isize = fwrite( (const void *)current, sizeof( STUDENT ), 1, fp );
      if (isize != 1) break;

      current = current->next;
     }

     fclose( fp );
    }

    void readfromfile()
    {
     STUDENT *current = (STUDENT *)NULL;
     STUDENT *tmp     = (STUDENT *)NULL;
     FILE    *fp      = (FILE *)NULL;
     int     isize    = 0;

     fp = fopen( DBFILE, "rb" );
     if (fp == (FILE *)NULL) return;

     for (int icnt = 0; icnt < 10; icnt++)
     {
      current = (STUDENT *)malloc( sizeof( STUDENT ) );
      if (current == (STUDENT *)NULL)
      {
       break;
      }

      isize = fread( (void *)current, sizeof( STUDENT ), 1, fp );
      if (isize != 1)
      {
       free( current );
       break;
      }

      current->next = (STUDENT *)NULL;
      if (head == (STUDENT *)NULL)
      {
       head = current;
       tmp  = current;
      } else {
       tmp->next = current;
       tmp = current;
      }
     }

     fclose( fp );
    }
    int main()
    {
     get_link();
     //show_link();
     writetofile();
     free_link();

     readfromfile();
     show_link();
     free_link();

     return 0;
    }

    [/code]

  5. cen0225 说:

    终于搞定了 3Q !!!

留下一个回复