scanf getchar()读取数据的原理

getchar(),每次从标准缓冲区(stdin)读取一个字符,如果缓冲区有多于一个字符,下次调用getchar(),会继续读取缓冲区的数据,如果读取一次后,缓冲区为空,则下次调用需等待用户输入。

scanf(),每次从标准缓冲区(stdin)读取有效字符(即忽略空格 换行 tab)。本质上讲,用户输入的内容都是字符串,scanf() 完成的是从字符串中提取有效数据的过程。scanf() 开始读取用户输入的内容,并根据格式控制字符串从中提取有效数据,只要用户输入的内容和格式控制字符串匹配,就能够正确提取。如输入数据包含逗号等,在格式说明符中应添加对应的符号做对应,才能正确读入有效数据。

%d %s %p等都是格式说明符,以 % 开头的用于指定输入数据格式的字符。

scanf 首先根据格式说明符去匹配 stdin 中的数据,若匹配成功,则将结果存放到指定的内存中,若匹配失败,scanf 会退出并返回。比如格式说明符为 %d ,scanf 会从 stdin 中匹配整型,如果stdin 中有整型数字则读入内存中,如不仅存在整型类型或者是其他类型数据, scanf() 不会跳过不符合要求的数据,遇到不符合要求的数据会读取失败,而不是再继续等待用户输入。但是上述不匹配的数据并不会从缓冲区中清除,后续的 scanf 调用仍从上述输入开始读取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值