| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2316 人关注过本帖
标题:从数组输出字符值给磁盘文本后,文本中除了实际字符值外,还有乱码,咋办
只看楼主 加入收藏
ycyu1455
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2016-4-3
结帖率:33.33%
收藏
已结贴  问题点数:20 回复次数:13 
从数组输出字符值给磁盘文本后,文本中除了实际字符值外,还有乱码,咋办
#include<stdio.h>            //专用路径E:\a.txt
#include<process.h>
void main()
{
    FILE *fp;
    char cChar[30];
    struct sStruct
    {
        char ilnt1[30];
        char ilnt2[30];
        char ilnt3[30];
    }xXs[100];
    int i,n;
    printf("输入存储学生资料文本的路径:");
    scanf("%s",&cChar);

    printf("输入学生总数:");
    scanf("%d",&n);
    fflush(stdin);
    for(i=0;i<n;i++)
    {
        printf("第%d个学生\n",i+1);
        printf("数学成绩:");
        scanf("%s",xXs[i].ilnt1);
        printf("语文成绩:");
        scanf("%s",xXs[i].ilnt2);
        printf("英语成绩:");
        scanf("%s",xXs[i].ilnt3);
        printf("\n");
    }

    if((fp=fopen(cChar,"wb"))==NULL)
    {
        printf("文本开流失败");
        exit(0);
    }
    for(i=0;i<n;i++)
    {
        if(fwrite(&xXs[i],sizeof(struct sStruct),1,fp)!=1)
        printf("第%d个学生成绩资料,数学:%s,语文:%s,英文:%s\n",i+1,xXs[i].ilnt1,xXs[i].ilnt2,xXs[i].ilnt3);
    }

    fclose(fp);
}
搜索更多相关主题的帖子: include 数学 资料 
2016-07-25 21:27
ycyu1455
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2016-4-3
收藏
得分:0 
这是书籍的例题,我感觉我的作业和例题差不多呀

#include <stdio.h>
#include<process.h>
struct address_list                                            
{
    char name[10];
    char adr[20];
    char tel[15];
} info[100];
void save(char *name, int n)                                    
{
    FILE *fp;                                       
    int i;
    if ((fp = fopen(name, "wb")) == NULL)                        
    {
        printf("cannot open file\n");
        exit(0);
    }
    for (i = 0; i < n; i++)
        if (fwrite(&info[i], sizeof(struct address_list), 1, fp) != 1)        
            printf("file write error\n");                           
    fclose(fp);                                                
}
void show(char *name, int n)                        
{
    int i;
    FILE *fp;                                       
    if ((fp = fopen(name, "rb")) == NULL)                    
    {
        printf("cannot open file\n");
        exit(0);
    }
    for (i = 0; i < n; i++)
    {
        fread(&info[i], sizeof(struct address_list), 1, fp);   
        printf("%15s%20s%20s\n", info[i].name, info[i].adr,info[i].tel);
    }
    fclose(fp);                                       
}
main()
{
    int i, n;                                    
    char filename[50];                           
    printf("how many ?\n");
    scanf("%d", &n);                                
    printf("please input filename:\n");
    scanf("%s", filename);                           
    printf("please input name,address,telephone:\n");
    for (i = 0; i < n; i++)                           
    {
        printf("NO%d", i + 1);
        scanf("%s%s%s", info[i].name, info[i].adr, info[i].tel);
        save(filename, n);                        
    }
    show(filename, n);                        
}
2016-07-25 21:28
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:4 
如 ilnt1[30] 30个字节都写入文件,而 scanf("%s",xXs[i].ilnt1) 可能只输入了几个字符,多余的字节内容是什么?又怎去处理?
2016-07-25 21:42
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:0 
不管它乱,照样读回去也不影响有效数据的完整性。
2016-07-25 21:44
ycyu1455
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2016-4-3
收藏
得分:0 
回复 3楼 吹水佬
书籍的例题和我差不多吧
2016-07-25 21:50
ycyu1455
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2016-4-3
收藏
得分:0 
以下是引用吹水佬在2016-7-25 21:44:29的发言:

不管它乱,照样读回去也不影响有效数据的完整性。

但是看着好难看
图片附件: 游客没有浏览图片的权限,请 登录注册
2016-07-25 21:53
ycyu1455
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2016-4-3
收藏
得分:0 
这是书籍代码的效果
图片附件: 游客没有浏览图片的权限,请 登录注册
2016-07-25 21:56
zx315
Rank: 5Rank: 5
来 自:广东
等 级:职业侠客
威 望:2
帖 子:86
专家分:378
注 册:2016-7-13
收藏
得分:4 
编码的问题吧,在打开文件的时候,指定的是二进制格式 fopen(name, "wb") ?应该是这个原因,还没看到文件 IO~~

Read The Fucking Source Code~
2016-07-25 22:19
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:4 
可以说说你用什么编译器,并且在什么环境中运行的,
我测试你的文件,1楼的代码基本不用改就能正常运行,二楼的代码只要加上一些清除输入流的代码也能正常运行。
并且没有一个记事本出现你说的乱码。
2016-07-25 22:42
ycyu1455
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2016-4-3
收藏
得分:0 
回复 9楼 linlulu001
我的编译器是vc6,其实不是编译器问题,二楼代码是书籍例题的正常代码,一楼代码是我码的不正常代码,刚才我使用好笨的方法,将二楼例题代码一步步的改成我的模样,发现是结构体的作用域问题,二楼的结构体如果做成局部结构体,文本值也会出现乱码,只要把结构体作用域改成全局就没有了,具体啥原因,明天再找,好困
2016-07-25 22:58
快速回复:从数组输出字符值给磁盘文本后,文本中除了实际字符值外,还有乱码,咋 ...
数据加载中...
 
   



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

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