为什么我这个C语言代码将明码的文件读取到结构体中时总显示乱码?
答案:3 悬赏:50 手机版
解决时间 2021-03-30 02:29
- 提问者网友:藍了天白赴美
- 2021-03-29 12:30
为什么我这个C语言代码将明码的文件读取到结构体中时总显示乱码?
最佳答案
- 五星知识达人网友:玩家
- 2021-03-29 12:56
你的文件中的数据,不是用fwrite(结构体)这种方式写到文件中去的
所以,你用fread(&students[i],nLine,1,fp); 是不能正确读到数据的!
试一下如下代码:
#include
#include
struct student
{
char num[13]; //---12位的整数会越界的,换成字符串
char name[20];
float score;
char time[20];
}students[6];
int main()
{
struct student studTmp;
FILE* fp;
if((fp=fopen("12.21shiyan.txt","r"))==NULL)
{
printf("can't build");
return -1;
}
while(!feof(fp))
{
fscanf(fp, "%s %s %s %f", studTmp.num, studTmp.name, studTmp.time, &studTmp.score ); //从文件中读数据
printf("%s,%c,%f,%c",studTmp.num,studTmp.name,studTmp.score,studTmp.time); //float对应%f
}
fclose(fp);
return 0;
}追问你的代码能读出来学号 和分数 但没有 姓名 和 时间 啊
这是结果的图片
追答printf("%s,%s,%f,%s",studTmp.num,studTmp.name,studTmp.score,studTmp.time); //name和time都应该用%s输出才对,刚才没有改全!
所以,你用fread(&students[i],nLine,1,fp); 是不能正确读到数据的!
试一下如下代码:
#include
#include
struct student
{
char num[13]; //---12位的整数会越界的,换成字符串
char name[20];
float score;
char time[20];
}students[6];
int main()
{
struct student studTmp;
FILE* fp;
if((fp=fopen("12.21shiyan.txt","r"))==NULL)
{
printf("can't build");
return -1;
}
while(!feof(fp))
{
fscanf(fp, "%s %s %s %f", studTmp.num, studTmp.name, studTmp.time, &studTmp.score ); //从文件中读数据
printf("%s,%c,%f,%c",studTmp.num,studTmp.name,studTmp.score,studTmp.time); //float对应%f
}
fclose(fp);
return 0;
}追问你的代码能读出来学号 和分数 但没有 姓名 和 时间 啊
这是结果的图片
追答printf("%s,%s,%f,%s",studTmp.num,studTmp.name,studTmp.score,studTmp.time); //name和time都应该用%s输出才对,刚才没有改全!
全部回答
- 1楼网友:长青诗
- 2021-03-29 14:07
进行转换一下追问要怎样转换?追答UTF-8.追问能说详细一点吗?最好把代码发过来
- 2楼网友:怙棘
- 2021-03-29 13:55
用fread无法正确读取用文本表示的数字(你所谓明码),可以这么读:
char buffer[256];
fgets(buffer);
sscanf(buffer,"%d%s%f%s",&students[i].num,students[i].name,
&students[i].score,students[i].time);
char buffer[256];
fgets(buffer);
sscanf(buffer,"%d%s%f%s",&students[i].num,students[i].name,
&students[i].score,students[i].time);
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯