| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 741 人关注过本帖
标题:编译结果为什么是乱码!!!!求大神
只看楼主 加入收藏
huangshengql
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2013-3-20
结帖率:71.43%
收藏
已结贴  问题点数:4 回复次数:5 
编译结果为什么是乱码!!!!求大神
#include<stdio.h>
#include<stdlib.h>
#define NUM 3
void main( )
{
    FILE *fp1; /*定义文件指针*/
   
    int i;
    struct rec{ /*定义结构体类型*/
        char id[10];
        char name[15];
        char department[15];
    }record[NUM];     
    printf("***********************************************************\n");
    printf("** This program is to show the random file input & output**\n");
    printf("***********************************************************\n");
    if ((fp1=fopen("e:\\infile.txt","w"))==NULL) /*以二进制只写方式打开文件*/
    {
        printf("cannot open file");/*出错返回*/
        exit(1);
    }
    for( i=0;i<NUM;i++)
    {
        printf("Please input id:");
        scanf("%s",record[i].id); /*从键盘输入*/
        printf("Please input name:");
        scanf("%s",record[i].name);
        printf("Please input department:");
        scanf("%s",record[i].department);
        fwrite(&record[i],sizeof(struct rec),1,fp1); /* 成块写入*/
    }
    fclose(fp1); /*关闭*/
    if((fp1=fopen("e:\\infile.txt","rb+"))==NULL)/*以可读写方式打开文件*/
    {
        printf("cannot open file"); /*出错返回*/
        exit(1);
    }
    printf("************************************\n");
    printf("%-10s%-15s%-15s\n","id","name","department");
    printf("************************************\n");
    for (i=0;i<NUM;i++)
    { /*显示全部文件内容*/
        fread(&record[i],sizeof(struct rec),1,fp1);
        printf("%-10s%-15s%-15s\n",record[i].id,record[i].name,record[i].department);
    }
    /*以下进行文件的随机读写*/
    fseek(fp1,2*sizeof(struct rec),0); /* 定位文件指针指向第三条记录*/
    fwrite(&record[1],sizeof(struct rec),1,fp1);
    /* 在第三条记录处写入第二条记录*/
    rewind(fp1); /*移动文件指针到文件头*/
    printf("************************************\n");
    printf("%-10s%-15s%-15s\n","id","name","department");
    printf("************************************\n");
    for (i=0;i<NUM;i++)
    { /*重新输出文件内容*/
        fread(&record[i],sizeof(struct rec),1,fp1);
        printf("%-10s%-15s%-15s\n",record[i].id,record[i].name,record[i].department);
    }
    fclose(fp1); /*关闭文件*/
    scanf("%d",i);
}
输入1  nico art  2 cage science 3 jean science
编译结果:1 烫烫烫烫nico 烫烫烫烫烫art 烫烫烫烫烫? 烫烫烫烫cage 烫烫烫烫烫science 烫烫烫? 烫烫烫烫cage 烫烫烫烫烫science 烫烫烫
搜索更多相关主题的帖子: department include record 
2013-04-25 14:18
Juson
Rank: 4
等 级:业余侠客
帖 子:70
专家分:235
注 册:2013-4-8
收藏
得分:2 
你不是用二进制读写的吗,有乱码正常,用ASCLL读写就没有乱码
2013-04-25 15:12
huangshengql
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2013-3-20
收藏
得分:0 
回复 2楼 Juson
能说下怎么改吗?
谢谢了
2013-04-25 15:36
wdd119
Rank: 2
等 级:论坛游民
帖 子:10
专家分:29
注 册:2012-11-12
收藏
得分:2 
if((fp1=fopen("e:\\infile.txt","rb+"))==NULL)/*以可读写方式打开文件*/
把“rb+”改为“rt+”
2013-04-25 17:22
wdd119
Rank: 2
等 级:论坛游民
帖 子:10
专家分:29
注 册:2012-11-12
收藏
得分:0 
b代表二进制
t代表文本格式
2013-04-25 17:23
Juson
Rank: 4
等 级:业余侠客
帖 子:70
专家分:235
注 册:2013-4-8
收藏
得分:0 
回复 3楼 huangshengql
这个不需要改
因为你在读写文件的时候用一个结构作为一整块进行读写的,即fwrite ( &record[i], sizeof (struct rec),1,fp );
读写块大小为sizeof ( srcut rec ),而你输入的数据并没有把这个数据块填满,所以中间才会出现乱码,不过这不影响程序的读写,因为你的读和写都是以一个结构体大小的块为读写单位的,怎么写进去的就怎么会读出来

你如果不希望看到文件中有乱码,那就有fprintf和fscanf进行读写
2013-04-26 00:27
快速回复:编译结果为什么是乱码!!!!求大神
数据加载中...
 
   



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

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