字符串输入之%s

[ Example ]

#include <stdio.h>

int main()
{
    int no;
    char name1[15], name2[15], name3[15];

    printf("Enter no and name1:\n");
    scanf("%d %15c", &no, name1);
    printf("%d %15s \n\n", no, name1);

    printf("Enter no and name2:\n");
    scanf("%d %s", &no, name2);
    printf("%d %15s \n\n", no, name2);

    printf("Enter no and name3:\n");
    scanf("%d %15s", &no, name3);
    printf("%d %15s \n\n", no, name3);

    return 0;
}

[ Output ]

1604435-20190810092523356-1966587925.png

[ Question ]

1、第二次输入完成后,按下回车,程序直接结束。为什么会自动忽略第三次输出?
2、为什么 York 进行输出?

[ Notice ]

当使用字符说明符%s时,一旦遇到空格,读取工作将终止。
scanf从输入数据行读取数据时,将忽略空白符:空格、制表符、换行符。

[ Answer ]

① 首先,我们测试另一组输入

1604435-20190810094130818-350649692.png

通过对比两组输入,我们发现,当遇到与字符说明符不符的用户输入时,scanf会自动的进行匹配。将整型数字赋值给%d,字符类型赋值给%s表示的变量,而与这两段拼接在一起的字符串之间是否有空格无关

② 通过调试,我们发现,能够使scanf 提前终止,有4个条件,满足其一即可:

  1. 如果指定了字段宽度,读取的字符数达到了了指定的宽度。(如%15c,输入的字符数目达到了15个)
  2. 读取时遇到了一个与字符说明符不匹配的字符。(如%d,而输入的是一个字符Y)
  3. 遇到了空白字符
  4. 到达文件末尾
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值