SCNU-HJT 2019-11-26 10:14 采纳率: 0%
浏览 720
已采纳

新人求助!!为什么输出的结果是乱码

#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;
 }

  • 写回答

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中矩阵文本型数据的总计问题。