处理txt文件中内容为什么不能识别出回车?

通天神树 2013-09-30 05:28:52
写了个代码,是读取一个txt文件中的内容,加密处理后输出到同名enc文件中。
现在我遇到的问题是,txt中好几行的内容,到enc中全合成一行了,我看了下,就是换行没有被识别出来。另外再enc的末尾还会多一个字符,随着txt中内容的变化,这最后多的一个字符也还不一样
我检查了我的代码,没看出问题啊,请教大神看看啊
其中读取输出的代码如下
 ifstream infile("F:\\Fall 2013\\CS 620\\P1.txt"); 
ofstream outfile("F:\\Fall 2013\\CS 620\\P1.enc");

if(!infile){
fatal("%s\n", "Unable to open infile");
}

if(!outfile){
fatal("%s\n", "Unable to open outfile");
}

char e;
while (infile.peek()!=EOF) { //while (!infile.eof())
infile>>e;
e=c.encode(e);
outfile<<e;
}
infile.close();
outfile.close();


类中加密的声明如下
char Cipher::encode( char ch ) {
int n=ch;
if (n>=97&&n<=122)
n=n-32-65;
else if(n>=65&&n<=90)
n=n-65;
else
return ch;
return ch=cipherkey[n];
}

具体实现是先生成一个随机字母cipherkey表用于替换,这里怎么生成就不贴了,和这个问题无关
...全文
951 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
通天神树 2013-09-30
  • 打赏
  • 举报
回复
引用 5 楼 ananluowei 的回复:
infile>>e; 用>>读一个字符会丢弃\n,而继续读去下一个字符 用e = infile.get() 或者 infile.get(e)
用put函数也一样了
 while (!infile.eof()){               
		e=infile.get();
			if(e=='\n')
				outfile.put(e);
			else
				e=c.encode(e);
			    outfile.put(e);
	}
通天神树 2013-09-30
  • 打赏
  • 举报
回复
引用 5 楼 ananluowei 的回复:
infile>>e; 用>>读一个字符会丢弃\n,而继续读去下一个字符 用e = infile.get() 或者 infile.get(e)
char e;
    while (!infile.eof()){               
		e=infile.get();
			if(e=='\n')
				outfile<<e;
			else
				e=c.encode(e);
			    outfile<<e;
	}
	infile.close();
	outfile.close();	
基本成功了,上面的问题都解决了,但是新问题是输出到enc里面之后,行与行之间多了一个回车,就是每两行之中多空了一行
大尾巴猫 2013-09-30
  • 打赏
  • 举报
回复
infile>>e; 用>>读一个字符会丢弃\n,而继续读去下一个字符 用e = infile.get() 或者 infile.get(e)
通天神树 2013-09-30
  • 打赏
  • 举报
回复
引用 3 楼 ananluowei 的回复:
你读取的方式是文本方式,那么读到1个\n的时候,不要把这个字符转换,直接写回文件。 还有1个办法,每次用string读一行(这样会丢弃\n),处理string中每个字符,变换后写到新的文件,再添加一个\n到新的文件,重复读一行的步骤,直到文件结束 。
我这样怎么还是没有变化呢
char e;
    while (infile.peek()!=EOF) {                 //while  (!infile.eof())
		infile>>e;
			if(e=='\n')
				outfile<<e;
			else
				e=c.encode(e);
			    outfile<<e;
	}
大尾巴猫 2013-09-30
  • 打赏
  • 举报
回复
你读取的方式是文本方式,那么读到1个\n的时候,不要把这个字符转换,直接写回文件。 还有1个办法,每次用string读一行(这样会丢弃\n),处理string中每个字符,变换后写到新的文件,再添加一个\n到新的文件,重复读一行的步骤,直到文件结束 。
通天神树 2013-09-30
  • 打赏
  • 举报
回复
引用 1 楼 ananluowei 的回复:
windows的换行符\n在txt文件中会转化成2个字符\r\n 用文本方式读写,系统会自动转换。 如果按二进制方式读写,需要自己处理。
引用 1 楼 ananluowei 的回复:
windows的换行符\n在txt文件中会转化成2个字符\r\n 用文本方式读写,系统会自动转换。 如果按二进制方式读写,需要自己处理。
能告诉我该怎么改么?不是很明白……
大尾巴猫 2013-09-30
  • 打赏
  • 举报
回复
windows的换行符\n在txt文件中会转化成2个字符\r\n 用文本方式读写,系统会自动转换。 如果按二进制方式读写,需要自己处理。

64,641

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧