C++ Primer Chapter8 Interrogating and Controlling the State of a Stream(流状态的查询和控制) 示例研究

书中示例:

int ival;

// read cin and test only for EOF; loop is executed even if there are other IO failures

while (cin >> ival, !cin.eof()) {

    if (cin.bad()) // input stream is corrupted; bail out

        throw runtime_error("IO stream corrupted");

    if (cin.fail()) { // bad input

        cerr<< "bad data, try again"; // warn the user

        cin.clear(istream::failbit); // reset the stream

        continue; // get next input

    }

    // ok to process ival

}

我在windowsxp环境下,使用vs2003的编译器编译并执行,发现陷入死循环。

利用string对象和sstream可以实现预期效果:

#include <iostream>
#include <cstdlib>
#include <sstream>
#include <string>
#include <cctype>

using namespace std;

using std::string;

void cinTest() {
    int ival;
    string line;
    string word;
    while (getline(cin, line)) {
        istringstream lstream(line);
        while (lstream >> word) {
            if (!isdigit(word[0])) {
                cerr<< "bad data: " << word << endl;
                continue;
            } else {
                istringstream wstream(word);
                wstream >> ival;
            }
        } // while small
    } // while large
}

int main() {
    cinTest();
    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值