Devc++编译器中用c写文件存取为什么打开文件为乱码?

//首先我写了学生信息管理系统的添加数据函数,需要将数据保存在磁盘里,将数据写入文件那一块用的c语言,其他为c++,代码如下:

void Add()

{

char a='Y';
FILE *fp;
if((fp=fopen("informations.dat","w"))==NULL)
    {
        printf("无法打开此文件 !\n");
        exit(0);
    }
while(a=='Y')
{
    //if()
    Info in;
    cout<<"请输入学生信息:"<<endl;
    cin>>in.id>>in.name>>in.score>>in.order;
    if(fwrite(&in,sizeof(struct Info),1,fp)!=1)
    cout<<"file write error"<<endl;     
    cout<<"是否继续添加?(Y/N)";
    cin>>a;
    //printf("%s",in.id);
}
fclose(fp);
putchar(10);

}

//此时打开文件里是乱码,如下图

图片说明

//另外写了一个只用来存文件的代码用来测试,打开就不是乱码,是正常数据。代码如下

#include<iostream>
using namespace std;
struct student
{
    string name;
    int grade;
};
int main()
{
    FILE *fp;
    student stu;
    if((fp=fopen("information","w"))==NULL)
        {
            printf("无法打开此文件 !\n");
            exit(0);
        }
    printf("请输入学号:");
    scanf("%s",&stu.name);
    printf("请输入成绩:");
    scanf("%s",&stu.grade);
    if(fwrite(&stu,sizeof(struct student),1,fp)!=1)
        cout<<"file write error"<<endl; 
        fclose(fp);
        putchar(10);
    return 0;
}

//若是将add函数中的信息输入语句cin 用scanf替换则文件中存不进数据,代码如下

void Add()
{
    char a='Y';
    FILE *fp;
    //ofstream file("info.xlsx",ios_base::in);
    initial();
    if((fp=fopen("informations.dat","w"))==NULL)
        {
            printf("无法打开此文件 !\n");
            exit(0);
        }
    while(a=='Y')
    {
        //if()
        Info in;
        cout<<"请输入学生信息:"<<endl;
        //cin>>in.id>>in.name>>in.score>>in.order;
        scanf("%s",&in.id);
        printf("请输入姓名:");
        scanf("%s",&in.name);
        printf("请输入成绩:");
        scanf("%d",&in.score);
        printf("请输入排名:");
        scanf("%d",&in.order);
        if(fwrite(&in,sizeof(struct Info),1,fp)!=1)
        cout<<"file write error"<<endl;     
        cout<<"是否继续添加?(Y/N)";
        cin>>a;
        //printf("%s",in.id);
    }
    fclose(fp);
    putchar(10);
}


求解,很想知道为什么

查看全部
qq_43109395
qq_43109395
2018/12/13 18:51
  • c++
  • c语言
  • 文件存储
  • 乱码
  • 点赞
  • 收藏
  • 回答
    私信

1个回复