2014-02-08 42 views
5

我刚开始学习C++(所以请原谅我为我的noobish查询)。下面是一些我写作练习的代码:当在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当我将一个字符串分配给一个整数变量。感谢你的帮助。

+0

你的'cin'永远不会被“忽略”。在这样的情况下,你应该将自己的想法引导到“我正在做什么”,然后?为什么?“并找出你阅读文件。小心。 –

+0

C++标准文档在哪里托管?我目前所拥有的只是Bjarne Stroustrup的“C++编程语言”。这是你的意思吗? – sayantankhan

+0

例如http://cppreference.com – leemes

回答

7

流有一个内部状态。如果输入失败,状态将被设置为指示错误,并且所有其他输入都将失败,除非该状态被清除。

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

测试流状态:

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

同样的,酒吧

如果你已经解决了,你可以使用cin.clear()清除错误状态下输入故障。

+0

所以,即使我尝试给foo和bar分配一个字符串,'cin'将会失败,foo和bar会保持为0? – sayantankhan

+0

@ Bolt64字符串仍在等待提取。错误状态不会自动消失。 –

+0

我想我知道了..谢谢了很多。 :) – sayantankhan

相关问题