加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 在cpp中奇怪的范围

发布时间:2020-12-16 09:45:39 所属栏目:百科 来源:网络整理
导读:当我使用字符串流时,我的cpp程序在使用作用域时做了一些奇怪的事情.当我将字符串和字符串流的初始化放在与我使用它的块相同的块中时,没有问题.但是如果我将它放在上面的一个块中,则字符串流不能正确输出字符串 正确的行为,程序打印由空格分隔的每个标记: #i
当我使用字符串流时,我的cpp程序在使用作用域时做了一些奇怪的事情.当我将字符串和字符串流的初始化放在与我使用它的块相同的块中时,没有问题.但是如果我将它放在上面的一个块中,则字符串流不能正确输出字符串

正确的行为,程序打印由空格分隔的每个标记:

#include <iostream>
#include <sstream>
#include <string>
using namespace std;

int main () {

    while (true){
        //SAME BLOCK
        stringstream line;
        string commentOrLine;
        string almostToken;
        getline(cin,commentOrLine);
        if (!cin.good()) {
            break;
        }
        line << commentOrLine;
        do{

            line >> almostToken;
            cout << almostToken << " ";
        } while (line);
        cout << endl;
    }
    return 0;
}

行为不正确,程序只打印第一个输入行:

#include <iostream>
#include <sstream>
#include <string>
using namespace std;

int main () {
    //DIFFERENT BLOCK
    stringstream line;
    string commentOrLine;
    string almostToken;
    while (true){
        getline(cin,commentOrLine);
        if (!cin.good()) {
            break;
        }
        line << commentOrLine;
        do{

            line >> almostToken;
            cout << almostToken << " ";
        } while (line);
        cout << endl;
    }
    return 0;
}

为什么会这样?

解决方法

当您“创建并销毁”每行的字符串流时,它也会重置失败状态.

您可以通过添加line.clear();就在您将新内容添加到行之前.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读