1.分支语句if else中的 “悬空else”
我们先来看一个代码:
光看这个代码,可能很多人会认为打印的是haha,但是其实结果是什么都不打印;
我在vs2022上打了这段代码:
发现else自动对齐了里面的if;事实上,else就是和它离得最近的if匹配的,悬空else其实还是由于书写习惯不好引起的;
如果要和第一个代码表达的意思一样,改正如下:
由此可见,培养好的代码书写习惯很重要!
2.清空缓冲区
2.1 getchar 和 putchar
getchar : 读取一个字符,返回的是字符的ASCII码值;读取失败,返回EOF(-1),调试后按Ctrl+z停止读取;
putchar : 打印一个字符;
2.2清空缓冲区
这里输入ABCDEF,回车后直接打印了“确认失败”;
出错的原因:scanf接收了缓冲区的ABCDEF,但是不接收回车("\n"),这就导致getchar接收的是\n,不等于Y,所以打印了“确认失败”;
所以我们要清空缓存区,在scanf 后面加上getchar():
但是,当输入123456 abc,又失败了:
这里 scanf 默认读取到空格就停止,于是getchar清掉了空格,下面的getchar读了a,不等于Y,所以确认失败;
于是,我们用while循环,当getchar读到(过了)\n ,就停止:
调试后正常,也就达到了清理缓冲区的效果