当在C++中将一个字符串值赋给整数变量时会发生什么?

6

我刚开始学习C++(所以请原谅我的初学者问题)。这是我写的一些练习代码:

#include<iostream>

int main()
{
    using namespace std;

    int foo;
    cin >> foo;

    int bar;

    cin >> bar;
    cout << "foo plus bar is " << foo+bar<< endl;
    return 0;
}

当两个输入都是数字时,此代码完美运行。但是,当我为第一个输入输入字符串(只是为了看看会发生什么)时,程序不会要求我输入第二个输入并输出结果为“foo plus bar is 0”。我想知道的是:为什么当我将字符串赋给整数变量时,程序跳过我的第二个 cin ?感谢您的帮助。


你的 cin 不会被“忽略”。在这种情况下,你应该思考:“我的 cin 正在做什么?为什么?”然后查阅文档进行查找。认真仔细地阅读文档。 - Lightness Races in Orbit
C++标准文档放在哪里托管?我现在只有Bjarne Stroustrup的《C++程序设计语言》。你所说的文档就是指这个吗? - sayantankhan
例如 http://cppreference.com - leemes
但是该标准已由ISO许可。如果您不想花钱,请阅读免费的标准提案; 但是我记不得在哪里可以下载它们... - leemes
1
@leemes:你指的是草稿,http://www.isocpp.org 是一个不错的资源。 - Lightness Races in Orbit
显示剩余2条评论
1个回答

7

流具有内部状态。如果输入失败,该状态将被设置以指示错误,并且除非清除该状态,否则所有后续输入都将失败。

在您的情况下,您应该用零初始化foo和bar。

测试流状态:

if( ! (cin >> foo)) {
    // Error
}

与bar相同

如果您已经解决了输入失败问题,您可以使用 cin.clear() 来清除错误状态。


那么,即使我尝试将字符串分配给foo和bar,cin也会失败测试,foo和bar仍将保持为0? - sayantankhan
@Bolt64 字符串仍在等待提取。错误状态不会自动消失。 - user2249683

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接