#include<stdio.h>
#include<stdlib.h>
FILE *f1;
int main()
{
char ch;
int i;
f1=fopen("temp.bin","wb");
if(f1==NULL)
{
printf("文件打开失败\n");
exit(0);
}
for(i=0;i<128;i++)
{
fputc(i,f1);
}
fclose(f1);
f1=fopen("temp.bin","rb");
if (f1==NULL)
{
printf("文件打开失败\n");
exit(0);
}
while(ch=fgetc(f1)!=EOF)
{
putchar(ch);
}
![图片说明](https://img-ask.csdn.net/upload/201911/26/1574734459_494095.jpg)
fclose(f1);
return 0;
}
新人求助!!为什么输出的结果是乱码
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 辉歌 2019-11-26 12:30关注
原因很简单:
while( ( ch=fgetc(f1) ) !=EOF) //优先级问题。
{
putchar(ch);
}/** 以下回答,是一个老司机翻车现场,可以看个笑话。在做这题的时候,我很奇怪为什么都是乱码,结果推翻了我自己的回答。**/
看您的代码,是先创建文件,然后写入128个字符,写入方式为这样的:
for(i=0;i<128;i++)
{
fputc(i,f1);
}然后读出文件内容,打印到屏幕上去。
为什么是乱码呢?不是您的文件读写有问题。而是您对ASCII还没有理解。您可以直接试试看下面的代码:
for(i=0;i<128;i++)
{
putc(i);
}您会发现用putc打印到屏幕的字符串也是乱码。
原因就是putc(i)中的i,根据您循环的取值,是0---128,这个数值,对应于ASCII表的0-128对应的字符,这些值中0-31对应的字符都不是可打印的字符。但是32-126对应的字符是可打印的。我尝试了,后面部分是可以打印出来的。
我觉得解决这个问题我的思考过程很重要。
1,我首先是用循环方式调用putchar,发现打印并非全乱码。说明不是ASCII问题。
2,难道是写入问题?
我使用hexdump来查看写出来的文件temp.bin,发现是正确的。
3,难道是读出来的问题?是碰到了什么特殊控制符让读出截断,后面的可打印字符没有打印出来?
加了计数后,看到是全部读出来了。
4,到底哪里读错了?
我在while循环中,将读出来的每一个字符和对应的序号打印出来,发现所有读出来的字符,打印的内容全部是一样的乱码符号。
5,将读出来的数值直接按照整数打印出来。
发现整数值全部是1.
6,此时还没有怀疑是优先级问题。
7,思考良久,难道是优先级问题?
尝试,发现真是。本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥50 MATLAB APP 制作出现问题
- ¥15 wannier复现图像时berry曲率极值点与高对称点严重偏移
- ¥15 利用决策森林为什么会出现这样·的问题(关键词-情感分析)
- ¥15 DispatcherServlet.noHandlerFound No mapping found for HTTP request with URI[/untitled30_war_e
- ¥15 使用deepspeed训练,发现想要训练的参数没有梯度
- ¥15 寻找一块做为智能割草机的驱动板(标签-stm32|关键词-m3)
- ¥15 信息管理系统的查找和排序
- ¥15 基于STM32,电机驱动模块为L298N,四路运放电磁传感器,三轮智能小车电磁组电磁循迹(两个电机,一个万向轮),怎么用读取的电磁传感器信号表示小车所在的位置
- ¥15 如何解决y_true和y_predict数据类型不匹配的问题(相关搜索:机器学习)
- ¥15 PB中矩阵文本型数据的总计问题。