zoukankan      html  css  js  c++  java
  • windows C input 注意

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

    如果freopen("CON", "rb",stdin); 则可以读到cr

    fgets会吸收换行,但是换行也被写入字符串

    如果不要字符串,scanf("%d ",&d); gets()最好。vs2015删除gets,用gets_s即可。

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

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

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

    要时刻牢记的是,' '是空白符,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

  • 相关阅读:
    洛谷1076 寻宝
    洛谷1349 广义斐波那契数列 【矩阵乘法】
    BZOJ1008 [HNOI2008]越狱
    vijosP1629 八
    vijosP1687 细菌总数
    vijosP1388 二叉树数
    怎么在windows上安装 ansible How to install ansible to my python at Windows
    阿里邮箱绑定Foxmail失败的解决办法
    Django html页面 'ascii' codec can't encode characters in position 8-10: ordinal not
    python2.X现在不能安装Django了:Collecting django Using cached Django-2.0.tar.gz
  • 原文地址:https://www.cnblogs.com/mengqingzhong/p/5903452.html
Copyright © 2011-2022 走看看