输入数据时,前面的数据输入错误,导致后面的数据都不能正常输入

#include <iostream>
#include <Windows.h>
#include <string>

int main(void) {
	int a;
	int b;
	int c;

	std::cin >> a >> b >> c;

	std::cout << "a=" << a << std::endl;
	std::cout << "b=" << b << std::endl;
	std::cout << "c=" << c << std::endl;

	system("pause");
	return 0;
}

 

解决方案:

#include <iostream>
#include <limits> // 用于 std::numeric_limits

using namespace std;

int main(void) {
    int a, b, c;

    while (true) {
        cout << "请输入a: ";
        cin >> a;
        if (cin.fail()) {
            cout << "输入错误,应该输入一个整数" << endl;
            cin.clear(); // 清除错误标志
            cin.ignore(numeric_limits<streamsize>::max(), '\n'); // 清空缓冲区
        } else {
            break; // 输入正确,退出循环
        }
    }

    while (true) {
        cout << "请输入b: ";
        cin >> b;
        if (cin.fail()) {
            cout << "输入错误,应该输入一个整数" << endl;
            cin.clear();
            cin.ignore(numeric_limits<streamsize>::max(), '\n');
        } else {
            break;
        }
    }

    while (true) {
        cout << "请输入c: ";
        cin >> c;
        if (cin.fail()) {
            cout << "输入错误,应该输入一个整数" << endl;
            cin.clear();
            cin.ignore(numeric_limits<streamsize>::max(), '\n');
        } else {
            break;
        }
    }

    cout << "a=" << a << endl;
    cout << "b=" << b << endl;
    cout << "c=" << c << endl;

    system("pause");
    return 0;
}

//不用循环隔开,可能当cin.fail()触发后,cin会进入失败状态,后续的输入操作(如cin >> b和cin >> c)会直接跳过,

cin.ignore() 是 C++ 中用于清空输入缓冲区的函数

cin.ignore() 有两个参数:
std::streamsize count:表示要忽略的最大字符数。如果为 std::numeric_limits<streamsize>::max(),则表示忽略缓冲区中的所有字符,直到遇到终止字符。
int delim:表示终止字符,默认值是换行符\n。当遇到这个字符时,忽略操作停止。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值