首先,对于一般的字符(字母,数字,符号),是直接加到printf的双引号里面的,而对于一些特殊的字符,如换行,引号,斜杠,反斜杠,制表符等等,这些在输出的时候很麻烦,于是想到一种方法,叫做【转义字符】,就跟他的名字一样,是转义的意思。
比如,要输出换行符在printf的字符串里面加入'\n',例:
printf("hello\n");
那么,输出完hello就会自动换行。
----------------------------------------------------------------------
顺便扩展延伸一下,我们常说的回车其实是编辑器里面是两个步骤,回车和换行是两个不同的概念,回车('\r')只是把光标放回一行的开始处,而换行('\n')是把光标放到下一行的同一位置,因此,平常在写东西满一行时,会从第二行开始接着来,这其实是回车加换行的共同作用,单纯的换行而不回车的话是从第一行的第几列跳到第二行的第几列。
为了证明上述的说法,其实你可以新建一个空的记事本,空的直接保存,查看属性则是0kb
然后打开,按一下键盘上的Enter,让光标停在第二行,保存,再查看大小。
会发现多了两个字节,这是因为多了一个Enter其实多了两个字符,一个'\n',一个'\r'
或者我们用十六进制编辑器打开同一个txt(如果你理解的了16进制编辑器的话)
因为是十六进制显示,所以两个16进制位是一个字节,也就是多了两个字节。
----------------------------------------------------------------------------------
最后是一些其他的转义字符,如输出引号
printf("\"hello world\" \n");
则会输出 "hello world" 会带上引号
其他常见的还有 \' \b \a \t \v 你用一下就知道了
C语言在向计算机输入文本文件时,将回车换行符转换为换行符,在输出时把换行符转换成回车和换行两个字符。
在用二进制文件时,不进行这种转换,在内存中的数据形式与输出到外部文件中的数据形式完全一致,一一对应。
c语言中怎样知道文件中的换行符是
回答是:这是一个实现相关的问题。
首先纠正一下你说法中的错误:
在Windows环境中,如果输入到文本文件,程序中的一个'\n'换行符被解释成'\r'、'\n'两个字符(会车、换行);相反,如果读取文本文件,文件中的相邻的两个'\r'、'\n'会合并为一个'\n'输出。
而在Unix/Linux环境下,'\n'就是'\n',保持不变。
因此,Windows下的文本文件和Unix/Linux下的文本文件的格式是不同的,其原因就在于对于程序中的'\n'换行符的解释不同。
n,换行符(软回车和走纸)
是换行走纸,没有回车,回车是由'\r'实现
在UNIX中,早期的输入通常是穿孔机,没有什么回车概念。在DOS中,由于是屏幕输入,通常就有了'\r''\n'的区别,为了保证每次换行都能从头开始,DOS中的换行符通常会被存储为'\r\n';getchar是标准流接受函数,不识别'\r',getche是有回显的屏幕截取函数,不识别'\n'。
在VC/MFC中,TextOut是CDC类(及其派生类)的方法,这个方法是不支持多行文本一起输出的。如果一定要用TextOut进行多行文本输出,你需要将字符串根据'\n'(0x0d)进行分割后,通过循环语句计算位置,一行一行的逐一输出。
当然,如果不限定TextOut,CDC类有多行文本输出函数,那就是DrawText,示例如下:
CString str = " 1 line\n 2 line\n 3 line";
//pDC->TextOut(50,50,str);
pDC->DrawText(str,CRect(50,50,200,100),DT_LEFT);
另外,windows API也有函数DrawText,功能是一样的,只是前面加了一个HDC句柄参数,指定要输出的DC设备。
使用字符串的话,在结尾加上“\r\n”
使用数组的话,在结尾加上0x0d 0x0a。