崔胜贤前女友金智英:关于文件读写问题!!!

来源:百度文库 编辑:中科新闻网 时间:2024/04/30 08:08:16
小弟要写一个关于文件读写的程序,但是输入后,读到文件里面的除了英文字母外其他总是乱码,不知为何,其原程序如下,希望那位大哥,大姐可以帮帮小弟?
#define Maxsize 100
typedef struct node{
int no; char name[10];int depno; float salary;int pno; int pdepno; int psalary;}EmpType;

void DelAll(EmpType emp[ ],int & n){
FILE *fp; if ((fp=fopen("emp.dat","wb"))==NULL)
{
printf("不能打开职工文件\n");
return;
}

emp[0].pno=emp[0].pdepno=emp[0].psalary=-1; n=0;
fclose(fp);}

void ReadFile(EmpType emp[],int & n){
FILE *fp;
long len;
int i;
if ((fp=fopen("emp.dat","rb"))==NULL)
{
n=0;
return;
}
fseek(fp,0,2);
len=ftell(fp);
rewind(fp);
n=len/sizeof(EmpType);
if(n!=0)
n--;
else
emp[0].pno=emp[0].pdepno=emp[0].psalary=-1;
for(i=0;i<=n;i++)

fread(& emp[i],sizeof(EmpType),1,fp);

fclose(fp);
}

void SaveFile(EmpType emp[],int n)
{
int i;
FILE *fp;
if((fp=fopen("emp.dat","wb"))==NULL)
{
printf(">>数据文件不能打开\n");
return;
}
if(n>1)
for(i=0;i<=n;i++)
{
fwrite(&emp[i],sizeof(EmpType),1,fp);
printf("\n");
}
fclose(fp);
}

void InputEmp(EmpType emp[],int &n)
{
printf(">>输入职工号,姓名,部门号,工资:");
n++;
scanf("%d%s%d%f",&emp[n].no,emp[n].name,&emp[n].depno,&emp[n].salary);
emp[n].pno =emp[n].pdepno=emp[n].psalary=0;
}

void OutputFile(EmpType emp[],int n)
{
int i ;
if (n<1)
{
printf(">>没有任何记录!\n");
return;
}
for(i=1;i<=n;i++)
printf(">>%3d%7s%2d%g\n",emp[i].no,emp[i].name,emp[i].depno,emp[i].salary);
}
void main()
{
EmpType emp[Maxsize];
int sel,n;
ReadFile(emp,n);
do
{
printf ("1: 输入2:输出3:按no排序4:按no输出5:按depno排序6:按depno输出7:按salary排序8:按salary输出9:全清0:存储退出 请选择:");
scanf("%d",&sel);
switch(sel)
{
case 9:
DelAll(emp,n);
break;
case 1:
InputEmp(emp,n);
break;
case 2:
OutputFile(emp,n);
break;
case 3:
Sortno(emp,n);
break;
case 4:
Dispno(emp,n);
break;
case 5:
Sortdepno(emp,n);
break;
case 6:
Dispdepno(emp,n);
break;
case 7:
Sortsalary(emp,n);
break;
case 8:
Dispsalary(emp,n);
break;
case 0:
SaveFile(emp,n);
break;
}
}while(sel!=0);
}
问题还没解决呢!!!

1、SaveFile里面的
if(n>1)
for(i=0;i<=n;i++)错了,
应该是
if(n>0)
for(i=0;i<n;i++)

2、OutputFile里面,printf里面把%f写成%g了。

这两个地方改过后,在我机子上运行是正常的,除了输出格式比较难看一点。

可以用C++文件流
#include<fstream>
using namespace std;
ifstream fin ("123.in");
ofstream fout ("123.out");

int main()
{
int x , y , z ;
char a [100] ;
fin >> x >> y >> z /*从文件123.in读3个int*/
fin >> a ; /*从文件123.in读一个字符串*/
fout << a ;/*向文件123.out写入字符串*/
fin.close() ; // 输入文件关闭
fout.close() ; //输出文件关闭
}

你函数形参是&n,而在函数内给n=0似乎不太对,不能给地址赋具体的值,只能*n=0 给指向的地址里赋值

关注