2 u201017971 U201017971 于 2016.01.26 10:57 提问

C语言,文件操作问题,fwrite函数的使用
 #include <stdio.h>
#include <stdlib.h>
#pragma warning(disable:4996)//

#define NULL 0
#define SIZE 2
struct student
{
    char name[10];
    int num;
    int age;
}stud[SIZE];

void save()
{
    FILE *fp;
    int i;
    if((fp=fopen("stulist.txt","wb"))==NULL)
    {printf("cannot open the file stulist\n");exit(0);}
    for(i=0;i<SIZE;i++)
        if(fwrite(&stud[i],sizeof(struct student),1,fp)!=1)printf("error\n");
    fclose(fp);
}
 void main(int argc,char *argv[])
{   
int i=0;
while(i<SIZE)
{
    scanf("%s%d%d",&stud[i].name,&stud[i].age,&stud[i].num);
    i++;
}
save();
}

上述从终端输入以后,在文件中是一堆乱码,跟终端输入的不一致,请问是哪个地出问题了啊。

3个回答

piaobotudou
piaobotudou   2016.01.26 11:07

2进制写入当然是乱码,但是name应该还是能看到的。

piaobotudou
piaobotudou 回复U201017971: 可以先用sprintf 格式化写入到字符串,然后再用fwrite写入文件
接近 2 年之前 回复
U201017971
U201017971 确实是name可以看到,是用的2进制写入。但是,如果想从终端输入之后,在文件中显示信息,那该怎么调用fwrite或者fread之类的函数呢?尝试使用w写入方式,输出结果还是不对额。
接近 2 年之前 回复
qq_27183003
qq_27183003   Ds   Rxr 2016.01.26 14:20

如果想在文件中方便看信息,可以使用文本方式:

    if((fp=fopen("stulist.txt","w"))==NULL)//文本方式打开文件
    {printf("cannot open the file stulist\n");exit(0);}
    for(i=0;i<SIZE;i++)
        fprintf(fp,"%s,%d,%d\n",stud[i].name,stud[i].num,stud[i].age);
    fclose(fp);
Royal_lr
Royal_lr   Ds   Rxr 2016.01.26 13:13

用英文的就不会乱码了,,

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!