C语言如何清除scanf()缓存

(1)清除缓存的函数是:

void safe_flush(FILE *fp)
{
	int ch;
	while( (ch = fgetc(fp)) != EOF && ch != '\n' );
}

(2)然后我们在使用的时候,直接调用就可以了:

scanf("%d",&k);

safe_flush(stdin);

这样就可以清除缓存带来的问题了!

(3)案例演示

a.当我们不清除scanf所带来的危害的时候:

#include<stdio.h>
#include<string.h>

int main()
{
	int k;
	printf("请输入你的秘钥:(整数)");
	scanf("%d",&k);

	char c;
	printf("请输入一个字符:");
	c = getchar();

	printf("%d ",k);
	printf("%c ",c);

}

我们发现 我们输入一个整数的时候,就自动结束程序了,并且将输入的数值作为缓存给了字符c

然后我们清除缓存:

#include<stdio.h>
#include<string.h>
//用于清除回车键缓存的影响
void safe_flush(FILE *fp)
{
	int ch;
	while( (ch = fgetc(fp)) != EOF && ch != '\n' );
}
int main()
{
	int k;
	printf("请输入你的秘钥:(整数)");
	scanf("%d",&k);

	safe_flush(stdin);

	char c;
	printf("请输入一个字符:");
	c = getchar();

	printf("%d ",k);
	printf("%c ",c);

}

当我们输入整数之后,提示我们输入字符,显然消除了缓存

ok!

时间: 2024-10-27 19:30:42

C语言如何清除scanf()缓存的相关文章

QTP加载第三方DLL(C#)实现清除IE缓存(转)

由于QTP的默认编程语言是VBS, 而VBS是一种相对来说功能比较局限的脚本语言,因此我们在编写自动化测试脚本时会有很多功能无法很好的实现. 相对来说c#是一种高级编程语言, 可以实现大多数windows环境下的功能. 所以我们可以借助C#来实现在VBS下无法实现或者实现起来麻烦的功能. 本篇文章以清除IE缓存为例, 介绍QTP如何与.Net framework集成. 1, 创建c# dll. 在Visual studio 中新建项目, 选择Class library. 命名为: Automat

Linux清除arp缓存

arp缓存就是IP地址和MAC地址关系缓存列表.在Windows下 arp -d [$ip] 不指定IP地址时清除所有arp缓存.在Linux下 arp -d $ip 必须指定IP地址才能执行这条命令的此参数,所有在Linux系统下 arp -d $ip 命令只能清除一个IP地址的对应MAC地址缓存,当然可以使用组合命令操作,这也算是Linux的一个优点吧. 组合命令清除所有arp缓存: arp -n|awk '/^[1-9]/{system("arp -d "$1)}' 其实Linu

关于清除arp 缓存的那点事儿

在Linux下,清除arp缓存表,例如: arp -d 10.0.3.6 我们可以用上面这条命令清除某一条记录,也可以用 arp -n |awk '/^[1-9]/{print "arp -d " $1}' |sh -x 清楚所有arp缓存,清除后效果如下: MAC地址下方会变为"incomplete",如果ping 一下ip地址就会再次获得相应的MAC地址. windows 清除缓存的方法也类似,只不过全部清除方法更简单,直接"arp -d"就

ios SDImageCache 清除所有缓存图片

我觉得奇怪,用官方给的下面方法就怎么也删除不了 [[SDImageCache sharedImageCache] clearDisk]; [[SDImageCache sharedImageCache] clearMemory]; 哎,干脆自己写个,反正很简单: #pragma mark 删除全部缓存图片 - (void)removeAllCacheImage { NSFileManager *fileManager = [NSFileManager defaultManager]; if ([

清除webBrowser 缓存和Cookie的解决方案

通过测试webBrowser与IE缓存和Cookie都存放在Local Settings\Temporary Internet Files,我们可以直接调用IE API进行清除 解决方案1: public enum ShowCommands : int { SW_HIDE = 0, SW_SHOWNORMAL = 1, SW_NORMAL = 1, SW_SHOWMINIMIZED = 2, SW_SHOWMAXIMIZED = 3, SW_MAXIMIZE = 3, SW_SHOWNOACTI

[dhcpd]清除dhcp缓存

修改了dhcp的default-lease-time && max-lease-time 清除缓存: rm /var/lib/dhcpd.leases~ echo "" > /var/lib/dhcpd.leases max-lease-time : default-lease-time, 在默认租约时间的0.5时,client请求dhcp,如果不能请求成功,在0.75时间继续请求,如果不能成功,...则到最大租约时间时候你的ip彻底无法使用. [dhcpd]清除

清除memcached缓存数据的方式

第一.连接:telnet 127.0.0.1 11211 第二.按回车键 第三.flush_all 后回车 控制台显示OK,表示操作成功 说明: 1.清空所有键值 flush_all 注:flush并不会将items删除,只是将所有的items标记为expired,因此这时memcache依旧占用所有内存. 2.退出 quit 清除memcached缓存数据的方式

清除dns缓存

Linux清除dns缓存命令 /etc/init.d/dnsmasq restart

清除图片缓存

?- (void)setupGroup1 { // 1.创建组 LKCommonGroup *group = [LKCommonGroup group]; [self.groups addObject:group]; // 2.设置组的所有行数据 LKCommonArrowItem *clearCache = [LKCommonArrowItem itemWithTitle:@"清除图片缓存"]; // 设置缓存的大小 //    NSString *caches = [NSSearc