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

分享到:
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;
}  

昵    称:
验证码:

相关文档:

  • C 扩展类库:celib
    celib 是使用ANSI C开发的一个扩展类库(c extend library),包含了一些常用的数据结构和算法的封装,可以应用到项目或者用于学习。...
  • C语言多平台程序库 LibU
    LibU 是一个支持多平台的 C 语言程序库,包含很多独立的模块,例如:内存分配、网络和URI解析、字符串处理、调试和日志记录,LibU 是...
  • C++的数据库访问层 Tntdb
    Tntdb 是一个 C++ 的类库用于访问数据库,实现了数据库独立的访问层,运行时加载驱动,当前支持 postgresql, sqlite3, mysql 和 oracle...
  • 一个 C++ 的基准测试管理库:Celero
    对代码进行持续性开发和有意义的基准测试是一个复杂的任务。虽然测试工具本身(Intel® VTune™ Amplifier, SmartBear AQTime, Valgrind)与应用程...
  • C++开源代码项目汇总
    Google的C++开源代码项目...
  • C++ 解析器 Cling
    Cling 是一个交互式的 C++ 解析器,基于 LLVM 和 C++ 的前端 clang。可用于替换当前 C++ 解释器 CINT,比 CINT 强...
  • C++中搜索、截取字符串
    C++中搜索、截取字符串...
  • 通用的 C/C++ 库 qLibc
    qLibc 项目的目的就是提供一个通用的 C/C++ 库,包括所有种类的容器和常用工具函数。...
  • C++代码生成器:xsd2cc
    Xsd2cc是一个霸气的C++代码生成器,直接从指定的XML数据格式定义文件(.xsd)生成对应的C++类代码,然后将这些代码和xsd2cc库结合(自带...
  • C++ 工具箱:openFramework
    openFrameworks 是一个旨在助力你进行开创性工作的开源 C++ 工具箱,提供了简单且直观的实验框架。该工具箱具有常见的工具...
  • libjc - C语言事件驱动开发包
    libjc 是 C 语言的事件驱动开发框架。...
  • C++格式化输出库 FastFormat
    FastFormat 是一个C/C++格式化输出的库,输入的参数是类型安全的/范型的/可扩展的。...
  • 非常精简的开源 C 协程库:Protothreads
    开源 C 协程库 protothreads。这是一个全部用 ANSI C 写成的库,之所以称为“蝇量级”的,就是说,实现已经不能再精简了,几乎就是原语级...
  • C++图像处理库 Pandore
    Pandore 是一个图像处理的标准函数库,当前版本支持 1D2D3D 图像。支持 灰度,颜色,或多光谱。...
  • C++之父谈关于C++的五个需要被重新认识的观点(中)
    概述:学习和使用过C++的人几乎都曾经听说过下面的五个关于C++的描述,并且对这些话笃信不已,那么现在的情况是怎么样的呢?本文的...
  • C++字符串详解
    之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够、字符串长度等等,而且作...
  • 30分钟了解C++11新特性
    C++11是曾经被叫做C++0x,是对目前C++语言的扩展和修正,C++11不仅包含核心语言的新机能,而且扩展了C++的标准程序库(STL),并入了大部...
  • 处理列表(List)的的高效C语言库 SimCList
    SimCList 是一个用来处理列表(List)的的高效C库。内置很多基于列表的算法,例如排序、查找、随机处理等等。...
  • C++集成开发环境 Code::Blocks
    Code::Blocks (codeblocks)是一个开源、免费、跨平台的c++ IDE。官方网站上称其能满足最苛刻的用户的需求。虽有点夸张,但既然敢这样说,也...
  • C++的XML解析器
    RapidXml 是一个用 C++ 编写的解析速度非常快的 XML 文档解析器。...