此文章所描述的内容适用于C语言,C++也可参考
CR、LF 还是 CRLF ?
gcc可能不会将字面串中的\r或\n根据所在操作系统替换
这意味着C代码中的\r
和\n
在程序运行时就真的是单一回车符CR和单一换行符LF
可以用gcc编译以下代码,运行编译得到的二进制文件,看看结果如何:
#include <stdio.h>
int main(int argc, char const *argv[])
{
FILE * f = fopen("test","w+");
fprintf(f , "\n\r\r\n");
fclose(f) , f = NULL;
//将\n、\r和\r\n输出到文件中
f = fopen("test","r");
int asc;
while((asc = fgetc(f)) != -1)
{
printf("%d\n", asc);
}
//打开文件看看是否是LF、CR和CRLF
fclose(f) , f = NULL;
printf("Press enter to continue...");
getchar();
return 0;
}
如果你的运行结果是这样:
10
13
13
10
Press enter to continue...
那么你所使用的gcc看起来并没有对转义字符\r
、\n
根据你所使用的操作系统进行替换
记事本可能会自动将CR、LF、CRLF都视为换行
至少,我在当前最新的win10版本中的记事本上发现了这一点:记事本会将打开的文件中存在的CR
、LF
、CRLF
都统一视为 换到下一行的行首
。
!记事本只是在显示效果上做了处理,并不会把文件中的CR、LF、CRLF都替换成CRLF!
windows控制台IO库conio.h中的getch()和getche()
当我们在windows控制台程序中调用getch()
或getche()
后,程序会被阻塞,等待用户按键,此时按下回车键程
序只会接收到CR,回显亦只有控制台下CR的效果(光标回车不换行)
windows控制台如何显示CR、LF、CRLF
CR:光标回到当前光标所在行行首
LF:光标去到当前光标所在行的下一行行首
CRLF:先显示CR,再显示LF
我们能输入什么
无论是按一下回车键还是向windows控制台粘贴一个windows换行符,我们都只能向控制台标准输入流中输入一
个LF
按键与输入有什么不同
getch()
和getche()
阻塞地监听一个按键,返回的是用户按下键的键码,回显的是此键码对应的字符
getchar()
获取用户的输入,用户的按下特定键会输入什么是不固定的,可以被多种因素影响,所有的标准输入函
数在用户输入时都有回显,回显的是用户输入的字符
按下回车键,
getch()
和getche()
监听到的是回车键,键码是13,对应字符CR,回显是CR
按下回车键,getchar()
获取到的是用户按下回车键所输入的LF,回显是LF
由上一点我们能想到什么
getch()
和getche()
监听用户按键,不存在缓冲区,每次调用都一定会阻塞,直到用户按下某个键后立即返回
所以,一些小伙伴们不要再试图通过清空标准输入缓冲区来跳过 getch() 和 getche() 的阻塞啦 ~
小技巧
仅使用一行代码便可清空标准输入缓冲区
rewind(stdin);
最后
#include 转载请注明出处哦
https://blog.csdn.net/weixin_43737206/article/details/99196571
fprintf(点个好看吧 , "嘿嘿");