C++ 输入类型不匹配检测方法

今天看C++ primer plus一书,看到C++中检测输入类型不匹配的检测方法。


输入类型不匹配是指输入的数据类型与所期望的类型不匹配,如 int n; cin >> n; 但输入的数据为字符串时,这

种情况就是输入类型不匹配。那么当出现这种情况时,变量n的值有没有改变呢,又该如何检测这种情况呢?


首先

  • 变量n的值并没有改变。
  • 不匹配的字符串仍留在输入缓冲区中。
  • cin类中的一个错误标志被设置了
  • cin方法转换成的bool类型返回值为false

检测方法:

如下面的示例程序,首先用good()方法检测输入是否出错,然后分别检测出错类型,先检测是否遇到 EOF,使用eof()方法,

然后检测是否出现输入类型不匹配的情况,使用fail()方法,注意 fail() 方法在当遇到 EOF 或者出现输入类型不

匹配时都返回true。

还可以使用bad()方法检测文件损坏或硬件错误而出现的输入错误。

// sumafile.cpp -- functions with an array argument
#include <iostream>
#include <fstream> // file I/O support
#include <cstdlib> // support for exit()
const int SIZE = 60;
int main()
{
	using namespace std;
	char filename[SIZE];
	ifstream inFile; // object for handling file input
	cout << “Enter name of data file: “;
	cin.getline(filename, SIZE);
	inFile.open(filename); // associate inFile with a file
	if (!inFile.is_open()) // failed to open file
	{
		cout << “Could not open the file “ << filename << endl;
		cout << “Program terminating.\n”;
		exit(EXIT_FAILURE);
	}
	double value;
	double sum = 0.0;
	int count = 0; // number of items read
	inFile >> value; // get first value
	while (inFile.good()) // while input good and not at EOF
	{
		++count; // one more item read
		sum += value; // calculate running total
		inFile >> value; // get next value
	}
	if (inFile.eof())
		cout << “End of file reached.\n”;
	else if(inFile.fail())
		cout << “Input terminated by data mismatch.\n”;
	else
		cout << “Input terminated for unknown reason.\n”;
	if (count == 0)
		cout << “No data processed.\n”;
	else
	{
		cout << “Items read: “ << count << endl;
		cout << “Sum: “ << sum << endl;
		cout << “Average: “ << sum / count << endl;
	}
	inFile.close(); // finished with the file
	return 0;
}


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值