• scanf函数加空白符


    scanf()中空白字符(包括/n,space)会使scanf()函数在读操作中略去输入中的零个或者一个或者多个空白字符,空白符可以是space,tab,换行 等等,直到第一个非空白符出现为止。
    sacnf ("%d ", &a[i]);的%d后面有个空格时,在输入数字后,sacnf会跳过所有空格字符,包括回车符,直到遇到不是空格字符才退出
    scanf加空白符之后的效果:

    空白符 : 空格(space)、TAB、回车( )、换页(f)、换行( )

    while((c = getchar()) == ’ ’ || (c = getchar()) == ‘ ’ || (c = getchar()) == ‘ ’);//跳过空白符、注意while语句后面是分号

    while((c = getchar()) == ’ ’ || (c = getchar()) == ‘ ’ || (c = getchar()) == ‘ ’)
    {
    NULL;
    }

    就是while语句内什么也不做,和上面的写法等同

    #include <stdio.h>

    int main(void)
    {
    int a = 0;

    scanf("%d ",&a);
    printf("%d ",a);

    return 0;
    }

    scanf中加 输入: (在这里 可以是空白符的任意一个)
    20
    s //这里可以是任意一个字母
    输出 20
    结果要输入两个数程序才结束,而不是预期的一个。

    并不是纯粹的换行符,
    原因:空白符结尾时,scanf会跳过空白符去读下一个字符,所以你必须再输入一个数;
    如果用scanf(“%d “,&a)也会出现同样问题

    解决: 当 你从键盘输入数据时,是先放在该缓冲中,然后scanf才从该缓冲中读数据,你不加 时,你输入i的值,然后回车想再输入m的值吧?这时送到缓冲中的就 是i的值和一个回车符,所以scanf第一次读的是i,第二次读的就是一个回车符,所以printf(“%c ”,m);输出的是回车,而不是你理想中 的m值,所以要加 读掉那个多余的回车符

    总结:scanf(“%d “,&a);%d后可以是空白符的任意一种,加空白符的作用是:如果打回车后想再输入一个值,通过加空白符可以读掉多余的回车符

    关于scanf:
    当调用scanf函数时,系统先从键盘缓冲区查找有木有数据,如果键盘缓冲区有数据,则直接读键盘缓冲区的数据,不等待用户输入;当键盘缓冲区木有数据时,再等待用户输入。
    输入结束标志: 非法输入、格式列控制、回车 结束本次输入
    如果输入的数据或者从键盘缓冲区读入的数据与格式控制列表不一致时,就会发生错误,就不会读取该字符(数据),本次输入结束。

    转载自:https://blog.csdn.net/hacker00011000/article/details/47987267

  • 相关阅读:
    Linux 下Firefox无法打开在'.domain'之前带有中划线的域名
    [Shell] 简单的自动检查ssh代理是否正常的脚本
    linux日志自动分割shell
    2014年学习计划
    [genome shell]标题栏优化
    什么样才叫解决问题?
    [mysql]清除单表大量数据方法(需保留部分数据)
    用linux c求最大公约数
    解决64位debian下无法安装ia32库的问题
    postfix邮箱服务器修改附件大小限制遇到的问题与解决
  • 原文地址:https://www.cnblogs.com/li-lou/p/12318683.html
Copyright © 2020-2023  润新知