c/c++ txt文件读写换行

用c/c++写字符串到文本文件.
在程序中用伟大的"\r\n"换行写入文本文件. 用xp自带的记事本打开该文件后,显示正常,该换行的地方都正确. 但是用记事本一编辑就出乱了,所有的换行都消失了.如何改程序使之保持正常换行
谢谢两位
conanwj1980 老兄;
我用的是CString;
CStdioFile file;
用CArchive ar;
ar.WriteString()写入的;
有没有很好的办法兼容其它文本编辑器改写而换行格式不出乱?

"\r\n"其实是回车和换行两个字符
"\n"是 New line,换行。
"\r"是 Carriage return,回车。
在Mac系统中的文本换行只用"\r",在Unix系统中只用"\n",在我们最常用的Windows系统中是"\r\n"。
楼主的写法会受到程序的字符集影响。如果是MBCS字符集中,"\n"就可以进行文本换行,"\r\n"在某些文本编辑器中会转换成两个换行符。
Windows自带的记事本对于换行符的识别能力很弱,你用程序写入"\r\n"进行换行,但直接在记事本中回车就只添加了"\n",再次打开时很容易出错的。

解决方法:
建议你用MFC的CString类存储字符串,并在写入时用str=_T("Test.\n");的写法。对文本文件的写入用CStdioFile类的WriteString函数,它可以实现对不同字符集的回车转换。
如果程序字符集是Unicode的话,别忘记在文本文件头部加入BOM头。具体请参阅MSDN
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-10-12
"\r\n"其实是回车和换行两个字符 "\n"是 New line,换行。 "\r"是 Carriage return,回车。 在Mac系统中的文本换行只用"\r",在Unix系统中只用"\n",在我们最常用的Windows系统中是"\r\n"。 楼主的写法会受到程序的字符集影响。如果是MBCS字符集中,"\n"就可以进行文本换行,"\r\n"在某些文本编辑器中会转换成两个换行符。 Windows自带的记事本对于换行符的识别能力很弱,你用程序写入"\r\n"进行换行,但直接在记事本中回车就只添加了"\n",再次打开时很容易出错的。
解决方法: 建议你用MFC的CString类存储字符串,并在写入时用str=_T("Test.\n");的写法。对文本文件的写入用CStdioFile类的WriteString函数,它可以实现对不同字符集的回车转换。 如果程序字符集是Unicode的话,别忘记在文本文件头部加入BOM头。
第2个回答  2008-08-27
文本文件操作中,换行只用'\n'就可以了,程序会自动加上'\r',如果你不信,可以试试下面的程序:

#include <stdio.h>

void main()
{
char data[3];
FILE *pF;
data[0]='a';
data[1]='\n';
data[2]='b';
pF=fopen("1.txt","w");
fwrite(data,1,3,pF);
fclose(pF);
}

编译之后运行,用记事本打开工程目录下生成的1.txt看看,是不是 a,b 和换行都有,而且这里只写入了3个字节,而生成的1.txt有4个字节。
第3个回答  2008-08-27
改用fputs()函数

c\/c++中txt文件读写换行怎么实现
在C语言中,以fopen打开文件,返回值为文件指针FILE*型。可以以如下方式读写换行:1、 fgetc\/fputc 该组函数功能为读写单个字符,如ch=fgetc(fp); fputc(ch, fp);2 fscanf\/fprintf 格式化输入输出函数。 以%c格式时,可以读写换行。如 fscanf(fp, "%c",&ch);fprintf(fp,"%c",ch);二、C...

c\/c++ txt文件读写换行
"\\n"是 New line,换行。"\\r"是 Carriage return,回车。在Mac系统中的文本换行只用"\\r",在Unix系统中只用"\\n",在我们最常用的Windows系统中是"\\r\\n"。楼主的写法会受到程序的字符集影响。如果是MBCS字符集中,"\\n"就可以进行文本换行,"\\r\\n"在某些文本编辑器中会转换成两个换行符。Windo...

c++ 读取txt文件中空格还有换行
C++的标准输入输出流提供了三个类库,<iostream><fstream><sstream>,在第三个<sstream>类库中有sstringstream这个类,这个类对象可以绑定一行字符串,然后以空格为分隔提取单词,可以解决你的问题。具体的步骤很简单,定义一个string变量,用getline()逐行读取你的文件,每读一行,用sstringstream的对象绑定...

C++怎么读取txt中的空格和换行
可以按行来输出的.ifstream infile("*.txt");\/\/用来打开文件 string s;\/\/存储返回的字符串,即一行的内容 while(getline(infile,s)){ cout<<s<<endl;} 就可以输出了.

C++读取TXT的换行问题
while(!out1.eof()){ out1.getline(line,sizeof(line));\/\/读取换行并丢弃换行符 cout << line;cout<<endl;\/\/加入换行符 }

c++中txt的换行问题
void copy_line(istream& file){ char ch;do { file.get(ch);cout<<ch;}while(ch!='\\n'&&file); \/\/文本文件里面可能有换行符,有些可能没有,while(file)指文件没有结尾的话。。。,在C里面,相当于EOF(),也就说若读出的字符是换行符或者文件已结束,那么本函数结束。不知道这样说懂...

c++文本输入中如何把换行读入
使用fgets()函数读取一行,如果独到的字符串是空的,则说明读到了一个空行,结束读入 在windows文件系统中,换行用'\\r\\n'来表示,只判断'\\n'可能会有问题。

c++往txt文件写入换行的问题
在文本模式下向文本中写入换行可以直接只用'\\n',在Window下会自动转换为'\\r''\\n'在binary模式下写入换行,Window下由于是使用\\r\\n来标识结尾,所以需要写入'\\r''\\n'两个字符,Linux只需要写入'\\n'

C++怎么读取txt文件指定的一行或计算出某一行的偏移量。谢谢大家了,这...
类型,那么这个类就只能存这种类型了,其他就无能为力了.因为C++里有万能指针 类型,而没有万能类型,如果想改为你说的那样,可以用摸板,王艳平老师其实 也写了你这个类的子类,再也把它摸版化了.就在你这个类的后面几页.回答第四个问题:<不用回答了> 回答第五个问题:那不就是指针类型的了吗?

c++中读写操作换行问题
实际在DOS里也没有换行,因为你往文件里写的时候和读出的时候都没有换行符,write函数里关闭文件前加一句fputc('\\n', fp);

相似回答