我是C++的新手,我正在尝试编写一个非常基本的程序,但我遇到了初始化整数的问题.我把它剥离到一个仍然存在问题的非常小的程序:
#include <iostream>
using namespace std;
int main()
{
    cout << "Please enter your age\n";
    int age = -1;
    cin >> age;
    cout <<"\n\n Your age is " << age << "\n\n";
}
我看了,如果我尝试输入一个字符串,例如abc在age变量,然后输入要失败和值应单独留在家中,因此它应该打印Your age is -1.
但是,当我运行此程序并键入时abc,它会打印出来Your age is 0.为什么?
Bau*_*gen 33
您希望观察的行为在2011年发生了变化.在此之前:
如果提取失败(例如,如果输入了预期数字的字母),则值保持不变,并设置failbit.
但是从C++ 11开始:
如果提取失败,则将零写入值并设置failbit.[...]
(来自cppr.)
使用我针对(gcc 4.8.4)测试的编译器,无论我针对哪个版本的标准编译,该值都设置为零(对于“abc”输入)。另请注意,如果您提供的有效整数超出了您所分配给的变量的支持范围,则它会设置为最小值/最大值。
不过,更重要的一点是,忽略错误标志会导致灾难。一旦输入出现错误,任何后续输入都是可疑的(没有像ignore()这样的黑客攻击)。像这样的情况很适合使用异常处理。
以下是我如何实现您正在尝试执行的操作(但是,再次考虑到多个输入的情况,从错误中恢复是一件麻烦事):
cin.exceptions( ~std::ios::goodbit );
try { cin >> age; }
catch ( std::ios::failure const & )
   {
   age=-1;
   cin.clear();
   cin.ignore(999,'\n');
   }
或没有例外:
cin >> age;
if ( cin.fail() ) age=-1, cin.clear(), cin.ignore(999,'\n');
类似问题请看这里:
以下是相关操作员的最新文档:
| 归档时间: | 
 | 
| 查看次数: | 2225 次 | 
| 最近记录: |