返回

“悬空else” 和 “清空缓冲区”

发布时间:2023-01-17 10:16:54 278

1.分支语句if else中的 “悬空else”

我们先来看一个代码:

“悬空else” 和 “清空缓冲区”_while循环

光看这个代码,可能很多人会认为打印的是haha,但是其实结果是什么都不打印;

我在vs2022上打了这段代码:

“悬空else” 和 “清空缓冲区”_代码表_02

发现else自动对齐了里面的if;事实上,else就是和它离得最近的if匹配的,悬空else其实还是由于书写习惯不好引起的;

如果要和第一个代码表达的意思一样,改正如下:

“悬空else” 和 “清空缓冲区”_代码表_03

由此可见,培养好的代码书写习惯很重要!


2.清空缓冲区

2.1 getchar 和 putchar

getchar : 读取一个字符,返回的是字符的ASCII码值;读取失败,返回EOF(-1),调试后按Ctrl+z停止读取;

putchar : 打印一个字符;

“悬空else” 和 “清空缓冲区”_while循环_04“悬空else” 和 “清空缓冲区”_缓存_05


2.2清空缓冲区

“悬空else” 和 “清空缓冲区”_while循环_06

这里输入ABCDEF,回车后直接打印了“确认失败”;

出错的原因:scanf接收了缓冲区的ABCDEF,但是不接收回车("\n"),这就导致getchar接收的是\n,不等于Y,所以打印了“确认失败”;

所以我们要清空缓存区,在scanf 后面加上getchar():

“悬空else” 和 “清空缓冲区”_代码表_07

但是,当输入123456 abc,又失败了:

“悬空else” 和 “清空缓冲区”_代码表_08

这里 scanf 默认读取到空格就停止,于是getchar清掉了空格,下面的getchar读了a,不等于Y,所以确认失败;


于是,我们用while循环,当getchar读到(过了)\n ,就停止:

“悬空else” 和 “清空缓冲区”_代码表_09

“悬空else” 和 “清空缓冲区”_缓存_10

调试后正常,也就达到了清理缓冲区的效果




特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线
下一篇
简单的猜数字游戏 2023-01-17 09:51:54