一、问题背景
数据输入时,数据类型不匹配。此时输入失败,变量的值还是原来的值。
说明:
变量如果不做初始化,它的值是不确定的。
良好的编程习惯:变量在定义时,进行初始化,eg:int age = 0;
#include<iostream>
#include<Windows.h>
using namespace std;
int main(void) {
int a = 0;//声明变量时赋初值,防止错误输入导致程序输出错误,提高健壮性。
int b = 0;
int c = 0;
cout << "请输入a、b、c的值:" << endl;
cin >> a >> b >> c;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
cout << "c = " << c << endl;
system("pause");
return 0;
}
输入char类型的数据,运行截图如下所示:
输入数据时,前面的数据输入错误,就会导致后面的数据都不能入。
二、解决方案
#include<iostream>
#include<Windows.h>
using namespace std;
int main(void) {
int a = 0;//声明变量时赋初值,防止错误输入导致程序输出错误,提高健壮性。
int b = 0;
int c = 0;
cout << "请输入a的值:";
cin >> a;
if (cin.fail()) {//检查输入时,是否发生了错误
cout << "输入错误,请输入整数" << endl;
cin.clear();//清除错误标记,使得后续输入可以正常进行
cin.sync();//已经输入的数据还在输入缓冲区,清空输入缓冲区
}
cout << "请输入b的值:";
cin >> b;
if (cin.fail()) {
cout << "输入错误,请输入整数" << endl;
cin.clear();
cin.sync();
}
cout << "请输入c的值:";
cin >> c;
if (cin.fail()) {
cout << "输入错误,请输入整数" << endl;
cin.clear();
cin.sync();
}
cout << "a = " << a << endl;
cout << "b = " << b << endl;
cout << "c = " << c << endl;
system("pause");
return 0;
}