【C语言】清除scanf缓存区的几种方法

本文介绍了三种技术处理输入流,包括使用scanf配合特殊格式化字符串清除回车,getchar配合循环读取直至遇到换行或文件结束,以及gets函数一次性读取一行。展示了如何避免输入回车导致的问题。

方法一:scanf ( “%*[^\n] %*c” );

【注】:

1.这里的星号 '* '表示读入某类型的内容,但是这个内容不保存到变量里,所以后面不需要对应的参量;

也就是说,在%后面加入星号之后,后面可以不放置接收的变量。

2. %*[^\n]表示读入除了回车之外的字符以及读入一个字符后不保存,只有这样,才不会把输入回车吸收,导致不能退出程序。

3.[]内是只读入限定读入的字符,如:[abcd]指的是只读入abcd的字符

4.所以整行代码的解释是"%*[^\n]"首先读入缓冲区的剩余内容,%*c是读入最后一个没有读入的回车;这样就清空的输入缓冲区.

方法二:使用getchar+while;

使用 while(getBuff=getchar()!=‘\n’ && getBuff!=EOF),使用循环把缓冲区的读完,直到读到缓冲区的\n或者是空值;

方法三:使用gets+预留最大值成功;

使用gets,创建一个数组,将缓冲区的内容读完;

方法二方法三都是使用流的方式,把剩余的东西一并读完,不管他是不是\n。

【试过不行的方法】:

一、使用fflush(stdin),这个不行,有人测试vc是ok的,但xcode和linux系统下都不行;

二、rewind(stdin),这个在xcode可以。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值