我做了一个程序,它将一个结构存储在一个文件中,但是输出与我预期的不同,看看,

/*
   Students DataBase Program
   Date:9th Dec,2010
   Topic:Data base in C.

*/
#include <stdio.h>
int main()
{
 struct student
 {
  char name[20];
  int e_no;
 }stud;
 char temp[20],ch;
 FILE *fp;
 clrscr();
 fp=fopen("D:\data1.txt","w+");
 gotoxy(28,5);
 printf("\nNED CIS ENROLMENT DATABASE\t");
 do
 {
  gotoxy(28,10);
  printf("\nEnter name of the student:\t");
  gets(stud.name);
  gotoxy(27,12);
  printf("\nEnter your enrolment number:\t");
  gets(temp);
  atoi(temp,stud.e_no,10);
  fwrite(&stud,sizeof(stud),1,fp);
  printf("\nWant to enter another record?[y/n]");
  ch=getche();
 }
 while(ch=='y'||ch=='Y');
 getchar();
 fclose(fp);
 return 0;
}

输出应该是学生的姓名和注册号,但这里是我每次输入任何数据时得到的输出类型。
文件输出:
慦慨d@〃݅@຦赅㈃愀慨d@〃݅@຦赅㈃

最佳答案

两件事:
不要使用gets。它容易发生缓冲区溢出。
如果希望文件中的数据采用ascii格式,则可能需要执行以下操作
fprintf(fp,“%s:%d\n”,stud.name,stud.e_no);
否则,它将打印数据的二进制表示形式(不可读和不可传输)。

10-06 14:37