如何让fread和fwrite不输出乱码?

如何让fread和fwrite不输出乱码?
4个回答
时间
投票
  • 0

    人间天使99

    二进制文件,用wb方式打开来写的文件,例如用fwrite写的。
    现在用rb方式打开来读,读的顺序与写的顺序要一致.

    例如(为简单,我把读写放在一个程序里)

    #include <stdio.h>
    #include <stdlib.h>

    #define SIZE 2
    struct student_type
    {
    char name[10];
    int num;
    int age;
    char addr[15];
    }stud[SIZE];


    FILE *fin;

    void main()
    {
    int i;
    FILE *fp;

    // 给值
    strcpy(stud[0].name,"xz");
    stud[0].num=1;
    stud[0].age=15;
    strcpy(stud[0].addr,"abcd");
    strcpy(stud[1].name,"xw");
    stud[1].num=2;
    stud[1].age=17;
    strcpy(stud[1].addr,"efgh");
    // 打开,写出
    fp=fopen("text.txt","wb");
    for(i=0;i<SIZE;i++)
    fwrite(&stud[i],sizeof(struct student_type),1,fp);
    fclose(fp);

    // 清数据
    strcpy(stud[0].name,"");
    stud[0].num=0;
    stud[0].age=0;
    strcpy(stud[0].addr,"");
    strcpy(stud[1].name,"");
    stud[1].num=0;
    stud[1].age=0;
    strcpy(stud[1].addr,"");

    // 打开,读入

    fp=fopen("text.txt","rb");
    for(i=0;i<SIZE;i++)
    {
    fread(&stud[i],sizeof(struct student_type),1,fp);
    // 打印 3 项
    printf("%s %4d %s\n",stud[i].name, stud[i].age,stud[i].addr);
    }
    fclose(fp);

    09-10-14 | 添加评论 | 打赏

    评论读取中....

  • 0

    x1oesp

    FILE   *fp;  
     //读方式打开  
     fp   =   fopen("data.txt",   "r");  
     //以下是各种读法  
     fgetc(fp);//读一个字符  
     fgets(fp);//读一行字符  
     fread(...);//按字节数读  
     fscanf(...);//按格式字符串读  
     //关闭文件  
     fclose(fp);  
       
       
     FILE   *fp;  
     //写方式打开  
     fp   =   fopen("data.txt",   "w");  
     //以下是各种写法  
     fputc(fp);//写一个字符  
     fputs(fp);//写一行字符  
     fwrite(...);//按字节数写  
     fprintf(...);//按格式字符串写  
     //关闭文件  
     fclose(fp);
    -------------------------------------
    还可以用freopen()来重定向,这样就可以直接用scanf()来读了  
       
     比如  
       
     a.txt  
     -----  
     1  
     2  
     3  
       
       
     那么  
       
     freopen(   "a.txt",   "r",   stdin   );  
       
     然后  
       
     scanf(   "%d   %d   %d",   &amp;a,   &amp;b,   &amp;c   );  
       
     这样就可以读进来了
    -------------------------------------------
    再补充一个  
     long   ftell(FILE   *stream)   函数返回定位在stream中的当前文件指针位置,以字节表示  
       
     #include   &lt;stdio.h&gt;    
       
     int   main(void)    
     {    
           FILE   *stream;    
       
           stream   =   fopen("MYFILE.TXT",   "w+");    
           fprintf(stream,   "This   is   a   test");    
           printf("The   file   pointer   is   at   byte   \    
                         %ld\n",   ftell(stream));    
           fclose(stream);    
           return   0;    
     }
    --------------------------------------
    给我加点分数吧。??????!!

    09-10-14 | 添加评论 | 打赏

    评论读取中....

  • 0

    poiuy_188

    二进制文件,用wb方式打开来写的文件,例如用fwrite写的。
    现在用rb方式打开来读,读的顺序与写的顺序要一致.

    例如(为简单,我把读写放在一个程序里)

    #include <stdio.h>
    #include <stdlib.h>

    #define SIZE 2
    struct student_type
    {
    char name[10];
    int num;
    int age;
    char addr[15];
    }stud[SIZE];


    FILE *fin;

    void main()
    {
    int i;
    FILE *fp;

    // 给值
    strcpy(stud[0].name,"xz");
    stud[0].num=1;
    stud[0].age=15;
    strcpy(stud[0].addr,"abcd");
    strcpy(stud[1].name,"xw");
    stud[1].num=2;
    stud[1].age=17;
    strcpy(stud[1].addr,"efgh");
    // 打开,写出
    fp=fopen("text.txt","wb");
    for(i=0;i<SIZE;i++)
    fwrite(&stud[i],sizeof(struct student_type),1,fp);
    fclose(fp);

    // 清数据
    strcpy(stud[0].name,"");
    stud[0].num=0;
    stud[0].age=0;
    strcpy(stud[0].addr,"");
    strcpy(stud[1].name,"");
    stud[1].num=0;
    stud[1].age=0;
    strcpy(stud[1].addr,"");

    // 打开,读入

    fp=fopen("text.txt","rb");
    for(i=0;i<SIZE;i++)
    {
    fread(&stud[i],sizeof(struct student_type),1,fp);
    // 打印 3 项
    printf("%s %4d %s\n",stud[i].name, stud[i].age,stud[i].addr);
    }
    fclose(fp);
    }

    09-10-14 | 添加评论 | 打赏

    评论读取中....

  • 0

    bea762

    #include &lt;stdio.h&gt;

    main()

    {

    float f[6]={3.2, -4.34, 25.04, 0.1, 50.56, 80.5};

    /*定义浮点数组并初始化*/

    int i;

    FILE *fp;

    fp=fopen(&quot;test_b.dat&quot;, &quot;wb&quot;); /*创建一个二进制文件只写*/

           /* fwrite(f, sizeof(float), 6, fp);将6个浮点数写入文件中*/

    for (i=0;i&lt;6;i++) fprintf(fp,&quot;%6.2f&quot;,f[i]);

            /*把你的fwrite改成fprintf即可实现你的愿望*/

    fclose(fp); /*关闭文件*/

    }

    09-10-14 | 添加评论 | 打赏

    评论读取中....

精华知识
更多  
意见反馈 帮助