zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    SpringBoot学习之配置Redis
    安全测试12使用nmap工具识别系统指纹信息
    安全测试11nmap扫描开放的端口
    安全测试17渗透攻击Mysql数据库服务
    安全测试18渗透攻击Tomcat服务
    安全测试16漏洞扫描工具Nikto详细使用教程
    实用且靠谱的18个免费引流推广方法
    安全测试15Maltego详细使用教程
    安全测试14ARP侦查工具Netdiscover
    统计本机tcp连接情况分离排查问题
  • 原文地址:https://www.cnblogs.com/li-lou/p/12318683.html
Copyright © 2011-2022 走看看