| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 954 人关注过本帖
标题:文件打开后 读入的是乱码 求大神支招!!!
只看楼主 加入收藏
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
区别大了  你再仔细核对2段代码的区别

DO IT YOURSELF !
2014-10-11 10:22
风车转风车89
Rank: 2
等 级:论坛游民
帖 子:125
专家分:45
注 册:2014-9-15
收藏
得分:0 
回复 9 楼 TonyDeng
好像说的是fread函数以二进制打开文件;可以读任何信息的内容;不要求内容也是二进制的?
2014-10-11 10:31
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用风车转风车89在2014-10-11 10:31:48的发言:

好像说的是fread函数以二进制打开文件;可以读任何信息的内容;不要求内容也是二进制的?

可以读任何信息,但不可以乱解码,看清楚我一直说的是解码,不是不能用fread()读。文件是文本的,有意义的单元是一个字符,而你的fread()用sizeof(int)读一次读的单元是4个字符。

授人以渔,不授人以鱼。
2014-10-11 10:35
风车转风车89
Rank: 2
等 级:论坛游民
帖 子:125
专家分:45
注 册:2014-9-15
收藏
得分:0 
回复 11 楼 wp231957
定义时;或这些语句是最好每一句都分开?
2014-10-11 10:35
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用风车转风车89在2014-10-11 10:35:29的发言:

定义时;或这些语句是最好每一句都分开?



那你看看这样的代码也可以正确运行  但是感官上觉得如何呢

#include<stdio.h>

int main(){FILE *fp;int i;char a[5]={0};fp=fopen("d:\\12300.txt","r+");if(fp==NULL){printf("can't found the file\n");return 0;}for(i=0;i<5;i++){fread(a+i,1,1,fp);printf("  a[%d]=%c  \n",i,a[i]);}fclose(fp);return 0;}

DO IT YOURSELF !
2014-10-11 10:48
风车转风车89
Rank: 2
等 级:论坛游民
帖 子:125
专家分:45
注 册:2014-9-15
收藏
得分:0 
回复 13 楼 TonyDeng
我明白了,太谢谢版主了,再请教一下在文本文件上怎么输入信息,每个信息用什么区分;例如有一组数字最大的是四位数最小的是一位数,难道一位数在记录时前面要加三个空格?
2014-10-11 11:03
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用风车转风车89在2014-10-11 11:03:32的发言:

我明白了,太谢谢版主了,再请教一下在文本文件上怎么输入信息,每个信息用什么区分;例如有一组数字最大的是四位数最小的是一位数,难道一位数在记录时前面要加三个空格?

文本文件就是一块屏幕,跟你在控制台上输入输出的方式是一样的。事实上,C在控制台上的流数据读写模式就是文本文件读写方式,scanf()调用的是fscanf()。不用刻意填补空格,如果为了好看和统一处理,当然填补了较好。

授人以渔,不授人以鱼。
2014-10-11 11:15
sidooh
Rank: 4
等 级:业余侠客
帖 子:121
专家分:265
注 册:2009-6-26
收藏
得分:1 
你输出的格式是%d, 自然是乱码.
版主的代码一次读一个字节就可以的话, 说明你用的不是中文. 那么你输出的时候改成%c也不会是乱码. 不过因为字节序的问题, 输出的内容顺序可能不对
2014-10-11 12:21
风车转风车89
Rank: 2
等 级:论坛游民
帖 子:125
专家分:45
注 册:2014-9-15
收藏
得分:0 
回复 18 楼 sidooh
为什么输出类型不能是%d,如果输出一个实数怎么输出?
2014-10-11 15:37
sidooh
Rank: 4
等 级:业余侠客
帖 子:121
专家分:265
注 册:2009-6-26
收藏
得分:0 
回复 19 楼 风车转风车 89
因为你想一个字符一个字符的输出, 所以得用%c.

如果用%d的话, 是将起始地址开始的四个字节当作一个int来输出.
比如printf("%d", c[1]) 会将c[1], c[2], c[3], c[4]这四个字节连接为一个int输出. 自然就不是你想要的结果了.
2014-10-12 23:52
快速回复:文件打开后 读入的是乱码 求大神支招!!!
数据加载中...
 
   



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

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