| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 874 人关注过本帖
标题:文件输入输出求助
只看楼主 加入收藏
yanglinayp
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2006-3-21
收藏
 问题点数:0 回复次数:11 
文件输入输出求助
#include<iostream>
#include <fstream>
using namespace std;
int main(){
char id[6];
char na;
char sex;
char zj[20];
char count[50];
cout<<" 请输入读者的ID";
cin>>id;
ofstream out("read.txt",ios::app);
out<<id;
out.close ();
ifstream in("read.txt");
in.read((char*)&count,sizeof (count));
cout<<count;
return 0;
}
这是我正在进行中的程序,in.read((char*)&count,sizeof (count));这条语句什么意思不是很明白,请大家帮帮忙!!还有为什么输出的结果中间会有很多的“烫”?

[此贴子已经被作者于2006-6-19 22:48:09编辑过]

搜索更多相关主题的帖子: 文件 输出 输入 
2006-06-19 22:32
stylev
Rank: 1
等 级:新手上路
威 望:1
帖 子:136
专家分:0
注 册:2006-5-30
收藏
得分:0 

#include<iostream>
#include <fstream>
using namespace std;

int main()
{
char id[6];
char na;
char sex;
char zj[20];
char count[50];

cout<<" 请输入读者的ID";
cin>>id;
ofstream out("read.txt");
out<<id;
out.close();

ifstream in("read.txt");
in.read((char*)&count,sizeof(count));
cout<<count;
in.close();

system("pause");
return 0;
}

//in.read((char*)&count,sizeof (count));
//从in流中读出最长为sizeof(count)长的字符保存到count数组,遇到空格和eof()结束


E-mail/MSN: stylev@
2006-06-19 23:35
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 

是吗?遇见eof()会结束?但是怎么出现乱码的?而且在输出那一行,换成cout<<strlen(count)结果却会大于50,简直吓我一跳


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-06-19 23:46
stylev
Rank: 1
等 级:新手上路
威 望:1
帖 子:136
专家分:0
注 册:2006-5-30
收藏
得分:0 

是吗?遇见eof()会结束?
我的意思可能没表达明白,
我意思说

如果遇到空格,不在把空格后面字符保存到text

输出时,遇到结束符eof,就把eof前字符串输出 //ps 这句算我多说,大家都懂


E-mail/MSN: stylev@
2006-06-19 23:52
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 

恩,知道。应该是count保存的read.txt中的字符,最多保存49个,最后一个非打印字符要用‘\0’,作为字符串结束标志.

是么?stylev?


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-06-20 09:08
stylev
Rank: 1
等 级:新手上路
威 望:1
帖 子:136
专家分:0
注 册:2006-5-30
收藏
得分:0 

应该是count保存的read.txt中的字符,最多保存49个,最后一个非打印字符要用‘\0’,作为字符串结束标志.

cout<<" 请输入读者的ID";
cin>>id;
//输入遇到空格或回车即把空格或回车前字符串保存到id,比如kje jek,只把kje保留到id

ofstream out("read.txt");
out<<id; //写入字符串 "kje\0"


in.read((char*)&count,sizeof (count));
//这里就不管你这么多了,直接从in指向的文件中一次性读出60个字符,当然不会写代码人操心最后加入'\0'结束,像wfpb说的样,因为文件最后有eof结束符.相当'\0'了



E-mail/MSN: stylev@
2006-06-20 17:08
C++大粉丝
Rank: 4
等 级:贵宾
威 望:10
帖 子:477
专家分:0
注 册:2004-4-23
收藏
得分:0 
乱码的意思就是没有初始化或者缓冲区溢出。

I am a big fan of c plus plus.
2006-06-20 17:10
yanglinayp
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2006-3-21
收藏
得分:0 
谢谢,能指教一下该如何解决乱码吗?

我是小小登山者!
2006-06-20 19:32
yanglinayp
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2006-3-21
收藏
得分:0 
谢谢!能请教一下怎么解决乱码的问题吗??

我是小小登山者!
2006-06-20 19:47
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
乱码是因为你的count中读入了49个字节,然而却有很多是无效的,所以出现乱码。
或许
in.read((char*)&count,sizeof(count));
for(int i=0;i<sizeof(count);i++){if(!isgraph(count[i]))count[i]='\0';}
count[strlen(count)]='\0';
cout<<count;

这样可以
没有编译,如果思路错误,请指教

[此贴子已经被作者于2006-6-21 8:02:41编辑过]


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-06-20 20:56
快速回复:文件输入输出求助
数据加载中...
 
   



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

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