ZeroTw 发表于 2020-6-8 18:56:17

if 和else都被执行了

#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:04:30

楼主发贴的目的是什么?找错误?

ZeroTw 发表于 2020-6-8 19:07:59

小甲鱼的铁粉 发表于 2020-6-8 19:04
楼主发贴的目的是什么?找错误?

为什么都会被执行

lei1996 发表于 2020-6-8 19:12:13

i = getchar();
后面加一个getchar(); 去掉你输入时候打的回车要不会把回车当作输入的第二个字符所以再会输出个3

ZeroTw 发表于 2020-6-8 19:13:22

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

懂了

CodingCat_k 发表于 2020-6-8 19:26:58

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

而getchar()函数恰恰是一个不丢弃在标准输入缓冲区遇到的任何字符的函数,所以就出现了if执行完了,因为后续的回车符还在缓冲区,所以紧接着读取它,因而else也会执行。
建议楼主在读取一次后刷新一次缓冲区,这样就不存在上述BUG了。

杨zy 发表于 2020-6-9 00:52:24

CodingCat_k 发表于 2020-6-8 19:26
先说一下标准缓冲区这个东西:首先从键盘缓冲区讲起,当我们在键盘上按下相关按键,键盘的相关电路会产生一 ...

好的谢谢
页: [1]
查看完整版本: if 和else都被执行了