主要代码,能够写入但读不出来,对 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”,¤t->No);
printf(“\n请输入姓名:”);
scanf(“%s”,current->Name);
printf(“\n请输入性别:”);
scanf(“%d”,¤t->Sex);
printf(“\n请输入生日(年 月 日):”);
scanf(“%d %d %d”,¤t->Birth.year,¤t->Birth.month,¤t->Birth.day);
printf(“\n请输入籍贯:”);
scanf(“%s”,current->Hometown);
printf(“\n请输入学历:”);
scanf(“%d”,¤t->Education);
printf(“\n请输入地址:”);
scanf(“%s”,current->Address);
printf(“\n请输入电话:”);
scanf(“%s”,current->Phone);
printf(“\n请输入工龄:”);
scanf(“%d”,¤t->WorkYears);
printf(“\n请输入基本工资:”);
scanf(“%f”,¤t->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);
}
>> 本文固定链接: http://www.vcgood.com/archives/1887
从键盘获取数据的代码片段没什么问题!!
不过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]
具体代码自己补全吧!
谢谢!
我去试试
哎~~~我太笨了还是不行,刚接触文件这,希望版主能给全代码,不胜感激
注解什么自己加吧,相关函数的使用看手册!这里只给出了代码!
[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]