有些人说windows里面换行到左端要用\r\n,但是为什么控制台编程里面不需要呢,直接\n就可以做到换行到左端
发布网友
发布时间:2022-04-22 10:32
我来回答
共3个回答
热心网友
时间:2023-11-01 14:00
楼主你好。。
这个问题我很久很久之前回答过一次,现在找不到了,再跟你说下吧~
\r\n的问题是很多在这个时代才接触编程的,并且是在Windows下使用现代IDE进行编程的新手程序员常有的问题。。
这个问题是历史遗留问题啦,\r在ASCII码中是0x0D,\n在ASCII码中是0x0A。
\r 为 return,回车,即使光标回到当前行的头。
\n为 newline,换行,即光标移动到当前位置的下一行。
楼主肯定在电影里看过打字机吧,\r\n最初就是为传动打字机服务的,打字机是光标不动,纸动的,所以要换行的时候,首先将光标移动到纸的第一行,然后卷轴滚动到下一行,这就是\r和\n最初所执行的功能。
那么当前的问题来了,在现代操作系统中,这两个东西还有啥意义呢,答案是没意义。
所以在Windows中,理论上仍然是使用\r\n来代表光标移动到下一行行首的意思。
而大多数C编译器自动将\n理解为\r\n的意思了,不然"123\n456"就会变成:
123
456
这样了。
顺便说一句,不知道是怎么回事,Windows将换行设计为\r\n,而Linux/Unix将其设计为\n,Mac为\r,这样的后果是,Linux/Unix的文本文件在Win下打开往往变成了一行,而\n在Win下不被支持,也就是说会出现像■类似的乱码,而Mac的文件同理。而Win的文本文件到其他系统中,每行结束往往出现^M这样的乱码,是因为多了一个命令的关系。
请追问~追问VC++里面,MFC里面的CString类的对象要用\r\n耶,只用\n则会在同一行。
而控制台编程就两种都行
追答看来楼主没有仔细看我说的呢。“大多数C编译器自动将\n理解为\r\n的意思了”也就是说在Windows下,换行回车只有一种可能,那就是\r\n,之所以\n也能产生同样的效果,是因为编译器在windows下直接把\n理解为\r\n了(如果是在其他系统下,\n会被理解为\n(Linux)和\r(Mac)),这是编译器自己的行为,而VC++使用的编译器是微软自己的标准,之所以用\r\n来代表回车换行,也许是因为windows是这么定义的吧。
另外VC++和C++是不一样的哦。
热心网友
时间:2023-11-01 14:00
\n 是换行,就是到下一行
\r 是回车,就是回到行首
其实在Windows里,用\n也就ok了,但是为了兼容,很多地方还都是用\r\n
热心网友
时间:2023-11-01 14:01
windows 下的 C 语言运行库会把 \n 解释成 \r\n。
你可以试试把 "a\nb" 写入文件,然后再读入看写入的是什么。追问MFC里面的CString类的对象要用\r\n耶,只用\n则会在同一行
控制台编程就两种都行
追答C 语言运行库的行为(这里指 IO 库)是由 C 标准委员会规定的。
由于几个系统对换行的标记不甚相同,这将使处理文本的程序的移植难度加大。因此规定 C 库 IO 底层在读入换行标记后,统一转换成 "\n",再返回程序;程序在写入 "\n" 之前,先转换成适合的符号,再写入系统。这样相同的 C 语言程序就可以在不同的系统下产生相同的行为,而不需要程序员做特殊的处理。
MFC 对象的行为是微软自行定义的。微软为何如此设计,也许有它自己的考虑。