scanf输入字符和数字的问题

scanf是c语言中的常用函数,使用前导入stdio.h

这里讲一些经常遇到的问题。

首先要明白scanf的本质。当我们需要调用scanf输入的时候,输入的字符送到键盘缓冲区,然后scanf从中读取所规定的字符,比如我们scanf中要求的是%d,即数字型,那么属于数字的内容将被读取,当遇到不属于数字的内容时,扫描终止,比如我们输入的是5s5555,那么只有第一个5能接收,如果输入8   555,那么也只有第一个8能收到。但是没有收到的部分并不是被抛弃,而是继续保留在缓冲区中,当需要下一次scanf时,从缓冲区读数据。

1,字符串注意事项。

字符串需要注意的是,空格和回车也会被scanf认为是字符,所以,举个例子

#include <stdio.h>

int main(){

int a;

char b;

scanf("%d",&a);

scanf("%d",&b);

}

输入 8 回车

会发现程序即终止,原因是因为,当我们输入8然后回车时,回车符任然留在缓冲区,然后被scanf扫描给b。

还要注意的是scanf在接受字符串时候遇到空格也会终止,解决办法是限定扫描集合

scanf("%[^\n]s",str);或者是用gets函数

解决办法是getchar();或者是fflush(stdin);后者是将缓冲区清空;

再看下面一个

scanf("%c %c",&a,&b);

scanf("%c%c",&a,&b);

上面两个语句有什么区别呢?

其实区别就在于,第一个说明了用空格符作为间隔符。对于第二个语句,如果输入

A空格           

那么打印出来a,b变量就分别是A和空格,但是对于第一个,则会一直等待另一个字符的输入,另外,第一个也不要求一定要有空格,如果输入cc则a和b都是c。也就是说,它的真正意义是空格会被忽略,不止是空格,换行符也会被跳过。

2,数字

数字,可以容纳大小长度,如%4d,那么他限制四个位,如果不足没有关系,比如输入8s8888,那么只有第一个8,如果输入的位数超过那么只有前面四个

如88889999,只有8888;

  • 38
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值