windows C input 注意
windows控制台输入,默认是以文本模式打开,即使重定向输入,文本模式不变,所以输入时无法读到cr,因为windows已经把crlf转换成单个lf。
如果freopen("CON", "rb",stdin); 则可以读到cr
fgets会吸收换行,但是换行也被写入字符串
如果不要字符串,scanf("%d ",&d); gets()最好。vs2015删除gets,用gets_s即可。
首先:fgets读入的是带'\n'的字符串。也就是说,在不超过第二个参数的情况下,fgets从第三个参数(文件指针,输入流)中不断的读入字符。直到遇到'\n',并将'\n'从输入流中取出。
其次:gets函数不检测读入的字符的个数。仅仅是不断的从标准输入流(键盘)中读入字符,直到遇到'\n'。与fgets不同的是,虽然gets函数也会将'\n'从输入流中取出,但却只是取出,然后丢掉。并不保存在目标字符串中(上述代码中既是str)。
最后:scanf函数不检测读入的字符的个数。仅仅是不断的从标准输入流(键盘)中读入字符,直到遇到“空白符”。和fgets/gets不同的是,scanf不从输入流中取出“空白符”。
要时刻牢记的是,'\r'是空白符,scanf函数不会读入它。但是fgets和gets函数会读取它!
http://blog.csdn.net/lanceleng/article/details/8730192
scanf
scanf会把换行留在输入缓冲区中,%s也会留下
Most of the conversion specifiers skip leading whitespace including newlines but %c
does not.
格式化字符串中,大部分指令都会忽略空白(isspace),%c除外
前面加一个空格,会忽略前导空白,包括换行。
while (scanf("%c",&c)!=-1)
printf("%c",c);
多次按ctrl+Z并不结束
下面序列可以结束
ctrl+z, cr
ctrl+Z,cr
Ctrl+D
最新文章
- 采用UDP协议的PIC32MZ ethernet bootloader
- 3D旋转相册(适合新手)
- 据说,每一个 iOSer 都想要一张 Swift 大会门票
- C++模板常用使用方法介绍
- PLSQL_性能优化工具系列10_Automatic Database Diagnostic Monitor - ADDM
- SQL Server ->;>; 关于究竟ALTER INDEX ... REBUILD会不会导致改变索引选项和Filegroup的验证
- 使用text-overflow:ellipsis对溢出文本显示省略号有两个好处
- HTML/W3C-WHATWG-Differences
- SHDP--Working with HBase(三)之HBase+Phoenix实现分页
- gridView行号的显示
- 自定义构造方法和description方法
- thymeleaf模板引擎shiro集成框架
- JavaSE中Collection集合框架学习笔记(1)——具有索引的List
- LAMP与LNMP架构的区别及其具体的选择说明
- Android开发——EditText的属性使用
- Python selenium巧用Javascript脚本注入解决按钮点选问题
- day53 鼠标事件 键盘事件 及JQuery
- ElasticSearch 入门
- Github链接及git学习心得总结
- JAVA常用代码