首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

c++ 两个系统下 输出不一致。解决思路

2012-03-04 
c++ 两个系统下 输出不一致。void sql_output(vector read_info &reads){ofstream out(reads_sql)int

c++ 两个系统下 输出不一致。
void sql_output(vector <read_info> &reads)
{
ofstream out("reads_sql");
int count=reads.size();
for(int i=0;i <count;i++)
{
  out < <i+1 < <'\t' < <reads[i].name < <'\t' < <reads[i].seq < <endl;
}
out.close();
}

在windows 下面 生成的map_sql文件正常 :
1 hfadf ACATACTACCTCACATCTACACTACACTATCTCAC
2 999 TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT
3 s1_1_220_26 ACGAAaaaAcCATTATTcTTGGTTTTATTGTTGGT
4 333 cTTGGTTTTATTGTTGGTTTTACCCAAAAgcGCCC

在linux下面 生成 这样呢(命令行下 more 看到的):
1 ACATACTACCTCACATCTACACTACACTATCTCAC
2 TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT
3 ACGAAaaaAcCATTATTcTTGGTTTTATTGTTGGT
4 cTTGGTTTTATTGTTGGTTTTACCCAAAAgcGCCC

在网页上看这个map_sql文件是这样的:
1 hfadf
ACATACTACCTCACATCTACACTACACTATCTCAC
2 999
TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT
3 s1_1_220_26
ACGAAaaaAcCATTATTcTTGGTTTTATTGTTGGT
4 333
cTTGGTTTTATTGTTGGTTTTACCCAAAAgcGCCC

把linux上这个文件下载到windows 下 用 ultraedit 打开:
1 hfadf
ACATACTACCTCACATCTACACTACACTATCTCAC?2 999
TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT?3 s1_1_220_26
ACGAAaaaAcCATTATTcTTGGTTTTATTGTTGGT?4 333
cTTGGTTTTATTGTTGGTTTTACCCAAAAgcGCCC

[解决办法]
是不是因为linux和windoews对 换行 的处理不同
windows换行是\r\n,十六进制数值是:0D0A。
LINUX换行是\n,十六进制数值是:0A
所以在linux保存的文件在windows上用记事本看的话会出现黑点,我们可以在LINUX下用命令把linux的文件格式转换成win格式的。
unix2dos 是把linux文件格式转换成windows文件格式
dos2unix 是把windows格式转换成linux文件格式
[解决办法]
不同系统对换行的不同处理
在MS系统中,文本文件约定以一个回车加一个换行符(或称为行反馈符)结尾.但是UNIX系统只是一个换行符结尾.
提示: 
标准包文本行定义为0或多个字符,后面跟一个表示结束的换行符,对于那些文本行的外在表现形式与这个定义不同的系统上,库函数负责外部形式和内部形式之间的编译.例如,在MS-DOS系统中,在输出时,文本中的换行符被写成一对回车/换行符.在输入时,文本中的回车符被丢弃.
二进制输入'\n'保存'\n'文本输入'\n'保存为"\r\n"

热点排行