| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 901 人关注过本帖
标题:输出为乱码问题求解
只看楼主 加入收藏
依旧迷茫
Rank: 1
等 级:新手上路
帖 子:9
专家分:2
注 册:2011-3-5
结帖率:100%
收藏
已结贴  问题点数:25 回复次数:8 
输出为乱码问题求解
有十名学生的数据(包括学号、姓名、和三门课程的成绩)存放在文件“score.txt”中,编写程序,把有不及格的学生数据存放到文件“bhg.txt”中,成绩都合格的学生数据存放到文件“hg.txt”中。
我的代码:
#include<stdio.h>
#define size 3
int main()
{
     struct st
     {
         int num;
         char name[10];
         int a;
         int b;
         int c;
     }stu[size];
     FILE *p,*q,*z;
     int i,k;
     printf("请输入学号、姓名、三科成绩用空格隔开\n");
     for(i=0;i<size;i++)
     {
         scanf("%d%s%d%d%d",&stu[i].num,stu[i].name,&stu[i].a,&stu[i].b,&stu[i].c);
     }
     if((p=fopen("hg.txt","wb+"))==NULL)
             printf("文件打开失败1\n");
     if((q=fopen("bhg.txt","wb+"))==NULL)
             printf("文件打开失败2\n");
     if((z=fopen("score.txt","wb+"))==NULL)
             printf("文件打开失败3\n");
     for(i=0;i<size;i++)
     {
         if(fwrite(&stu[i],sizeof(struct st),1,z)!=1)
             printf("文件写错误3\n");
         if(stu[i].a<60||stu[i].b<60||stu[i].c<60)
             {
         if(fwrite(&stu[i],sizeof(struct st),1,p)!=1)
             printf("文件写错误1\n");
         }
         else
         {
          if(fwrite(&stu[i],sizeof(struct st),1,q)!=1)
                 printf("文件写错误2\n");
         }
     }
         fclose(z);
         fclose(p);
         fclose(q);
     return 0;
}

运行没有出错,但是txt文档打开后都是类似    a 烫烫烫烫烫W    >    /        b 烫烫烫烫烫N    X    J        c 烫烫烫烫烫W    N    M    这样的乱码 是什么原因呢?是不是二进制转换的时候出现问题?
我刚学C语言,希望大家能帮帮忙 谢谢啦

搜索更多相关主题的帖子: 姓名 三门 
2011-06-14 12:09
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
这是正常现象。
用 fwrite 写的文件是按照二进制数据文件来写的。用记事本神马的打开必然是乱码。
而且,文件格式跟扩展名没有任何关系。
filename.txt 未必就是文本本件

楼主去 google 一下 fprintf 应该就能解决问题
2011-06-14 12:51
依旧迷茫
Rank: 1
等 级:新手上路
帖 子:9
专家分:2
注 册:2011-3-5
收藏
得分:0 
回复 2楼 voidx
那应该怎么验证自己的结果是否正确呢?
2011-06-14 12:54
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:5 
你可以再写个程序用 fread 把数据读出来然后 printf 啊
或者就直接 fprintf
2011-06-14 12:56
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:20 
呵呵fwrite是把你的结构体转了字符型写入文件的  当然是乱码

要向读出来用fread  这样就只有你的程序才能看懂乱码文件

也是一种加密的效果

                                         
===========深入<----------------->浅出============
2011-06-14 15:10
依旧迷茫
Rank: 1
等 级:新手上路
帖 子:9
专家分:2
注 册:2011-3-5
收藏
得分:0 
回复 5楼 laoyang103
1.那如果不用fread怎么检验函数是否真确?
2.不用fread有没办法直接打开文件看内容?
2011-06-14 18:05
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
查看内存数据和文件的是否一致就可以了  

当然你看到的肯定不是学生的信息 你看到的仍然是乱码

所以你要对照是否一样的也是乱码

                                         
===========深入<----------------->浅出============
2011-06-14 18:24
依旧迷茫
Rank: 1
等 级:新手上路
帖 子:9
专家分:2
注 册:2011-3-5
收藏
得分:0 
回复 7楼 laoyang103
是我做错了还是只能用fread方法检验?
2011-06-14 22:34
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
不是告诉你查看内存检测嘛

                                         
===========深入<----------------->浅出============
2011-06-14 22:39
快速回复:输出为乱码问题求解
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.037016 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved