windows C input 注意

windows控制台输入,默认是以文本模式打开,即便重定向输入,文本模式不变,因此输入时没法读到cr,由于windows已经把crlf转换成单个lf。windows

若是freopen("CON", "rb",stdin); 则能够读到cr函数

 

fgets会吸取换行,可是换行也被写入字符串spa

 

若是不要字符串,scanf("%d ",&d); gets()最好。vs2015删除gets,用gets_s便可。.net

 

首先:fgets读入的是带'\n'的字符串。也就是说,在不超过第二个参数的状况下,fgets从第三个参数(文件指针,输入流)中不断的读入字符。直到遇到'\n',并将'\n'从输入流中取出指针

其次:gets函数不检测读入的字符的个数。仅仅是不断的从标准输入流(键盘)中读入字符,直到遇到'\n'。与fgets不一样的是,虽然gets函数也会将'\n'从输入流中取出,但却只是取出,而后丢掉。并不保存在目标字符串中(上述代码中既是str)。code

最后:scanf函数不检测读入的字符的个数。仅仅是不断的从标准输入流(键盘)中读入字符,直到遇到“空白符。和fgets/gets不一样的是,scanf从输入流中取出“空白符”。blog

要时刻牢记的是,'\r'是空白符,scanf函数不会读入它。可是fgets和gets函数会读取它!ip

http://blog.csdn.net/lanceleng/article/details/8730192ci

 

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

相关文章
相关标签/搜索