最近遇到一个问题:有一段代码,当我第一次输入的类型跟定义的类型不一致时那么接下来第二次、第三次的输入都会被跳过,代码示例如下:
int main(void)
{
int num1, num2, num3;
std::cout << "请输入第1个数:" << std::endl;
std::cin >> num1;
std::cout << "请输入第2个数:" << std::endl;
std::cin >> num2;
std::cout << "请输入第3个数:" << std::endl;
std::cin >> num3;
std::cout << "输入的第1个数是" << num1 << std::endl;
std::cout << "输入的第2个数是" << num2 << std::endl;
std::cout << "输入的第3个数是" << num3 << std::endl;
system("pause");
}
正常输入没问题,但是当我们第一个输入一个非int型的数据时,比如一串字母,那么第二次、第三次输入就直接被跳过了,回显如下:  这是什么原因呢,原来当我们敲回车之后,会将数据全部送到输入缓冲区。当缓冲区为空时,程序才会暂停,让用户输入数据。  如果类型不匹配,此时输入失败,变量的值还是原来的值,由于我们定义的时候没有初始化,所以显示了我们无法预料的值。当我们赋值之后可以看到:
int main(void)
{
int num1 = 0, num2 = 1, num3 = 2;
std::cout << "请输入第1个数:" << std::endl;
std::cin >> num1;
std::cout << "请输入第2个数:" << std::endl;
std::cin >> num2;
std::cout << "请输入第3个数:" << std::endl;
std::cin >> num3;
std::cout << "输入的第1个数是" << num1 << std::endl;
std::cout << "输入的第2个数是" << num2 << std::endl;
std::cout << "输入的第3个数是" << num3 << std::endl;
system("pause");
}
 最后显示的确实是初始化的值。
|