相关疑难解决方法(0)

105
推荐指数
7
解决办法
28万
查看次数

为什么stringstream >>在失败时改变目标值?

来自Stroustrup的TC++ PL,第3版,第21.3.3节:

如果我们尝试读入变量v并且操作失败,则v的值应该保持不变(如果v是istream或ostream成员函数处理的类型之一,则它不会改变).

以下示例似乎与上述引用相矛盾.基于上面的引用,我期待v的值保持不变 - 但它会变为零.对这种明显的矛盾行为有什么解释?

#include <iostream>
#include <sstream>

int main( )
{
    std::stringstream  ss;

    ss  << "The quick brown fox.";

    int  v = 123;

    std::cout << "Before: " << v << "\n";

    if( ss >> v )
    {
        std::cout << "Strange -- was successful at reading a word into an int!\n";
    }

    std::cout << "After: " << v << "\n";

    if( ss.rdstate() & std::stringstream::eofbit  ) std::cout << "state: eofbit\n";
    if( ss.rdstate() & std::stringstream::failbit ) std::cout << "state: failbit\n"; …
Run Code Online (Sandbox Code Playgroud)

c++ state stringstream cin

53
推荐指数
1
解决办法
2598
查看次数

为什么cin,期望一个int,在输入无效的情况下将相应的int变量更改为零?

我是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";
}
Run Code Online (Sandbox Code Playgroud)

我看了,如果我尝试输入一个字符串,例如abcage变量,然后输入要失败和值应单独留在家中,因此它应该打印Your age is -1.

但是,当我运行此程序并键入时abc,它会打印出来Your age is 0.为什么?

c++

26
推荐指数
2
解决办法
2225
查看次数

是否保证标准提取运算符>>在失败的情况下不会改变参数?

如果在调用像input_stream >> i;这里i是算术型,抛出异常或设置badbit等,是保证i并没有改变?

c++ extraction-operator

1
推荐指数
1
解决办法
76
查看次数