鱼C论坛

 找回密码
 立即注册
查看: 1165|回复: 6

[已解决]if 和else都被执行了

[复制链接]
发表于 2020-6-8 18:56:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<iostream>
using namespace std;
int main()
{
        char i;
        while (1)
        {
                i = getchar();
                if (i == '1')
                        cout << "1" << endl;
                else if (i == '2')
                        cout << "2" << endl;
                else
                        cout << "3" << endl;
        }
}
最佳答案
2020-6-8 19:12:13
i = getchar();
后面加一个getchar(); 去掉你输入时候打的回车  要不会把回车当作输入的第二个字符  所以再会输出个3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-8 19:04:30 | 显示全部楼层
楼主发贴的目的是什么?找错误?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-8 19:07:59 | 显示全部楼层
小甲鱼的铁粉 发表于 2020-6-8 19:04
楼主发贴的目的是什么?找错误?

为什么都会被执行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-8 19:12:13 | 显示全部楼层    本楼为最佳答案   
i = getchar();
后面加一个getchar(); 去掉你输入时候打的回车  要不会把回车当作输入的第二个字符  所以再会输出个3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-8 19:13:22 | 显示全部楼层
lei1996 发表于 2020-6-8 19:12
i = getchar();
后面加一个getchar(); 去掉你输入时候打的回车  要不会把回车当作输入的第二个字符  所以 ...

懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-8 19:26:58 | 显示全部楼层
先说一下标准缓冲区这个东西:首先从键盘缓冲区讲起,当我们在键盘上按下相关按键,键盘的相关电路会产生一个扫描码,然后通过键盘驱动程序处理,经过某个端口送至键盘缓冲区,该缓冲区内就存储了扫描码与ASCII码;
而我们的标准输入缓冲区就在按下回车键时将键盘输入缓冲区的ASCII码加入其中,但是,回车符号此时也被读入了标准输入缓冲区。

而getchar()函数恰恰是一个不丢弃在标准输入缓冲区遇到的任何字符的函数,所以就出现了if执行完了,因为后续的回车符还在缓冲区,所以紧接着读取它,因而else也会执行。
建议楼主在读取一次后刷新一次缓冲区,这样就不存在上述BUG了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-9 00:52:24 From FishC Mobile | 显示全部楼层
CodingCat_k 发表于 2020-6-8 19:26
先说一下标准缓冲区这个东西:首先从键盘缓冲区讲起,当我们在键盘上按下相关按键,键盘的相关电路会产生一 ...

好的  谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-13 15:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表