穿越getline,fstream,范围不一致

时间:2014-08-04 16:48:13

标签: c++ fstream getline

我正在阅读std :: getline(),但我并没有弄清楚我做错了什么。在这种情况下,我不确定为什么我的user_input变量(在主功能块中声明并定义为" 0")将被正确地修改为" 2"在修改它的内部块中,然后设置为" NULL"之后在主功能块中。

我的理解是,当在嵌套块中修改内容时,外部块不识别更改 - 它们永远不会离开内部块的范围。

我最好的猜测是它必须与我的文件打开和关闭文件有关,或者我不知道getline如何与它们交互。在过去的一年里,我做了很多cin和cout,但是没有触及getline,也没有文件交互。

//fake_main.cpp

#include <fstream>
#include <iostream>
#include <string>

int main()
{
    //---|Initializations|---
    std::string user_input = "0";
    //user_input is 0 in this block

    std::ofstream outbound_filestream;
    outbound_filestream.open ("a.txt");
    outbound_filestream << "2" << std::endl;
    outbound_filestream.close();

    std::ifstream inbound_filestream;

    //verifying that there is a "2" in my otherwise empty file
    inbound_filestream.open ("a.txt");
    if (inbound_filestream.is_open())
    {
        while (std::getline(inbound_filestream, user_input))
        {
            std::cout << user_input << '\n';
            //user_input is 2
        }
        inbound_filestream.close();
    //right here, after losing scope, user_input is NULL, not 0.
    }
    //and then, following suit, user_input is NULL here, not 0 or 2.

    //---|Main Program|---

    intro(user_input);

    //snip

    return 0;
}

1 个答案:

答案 0 :(得分:0)

    while (std::getline(inbound_filestream, user_input)) {
    }

将读取user_input变量的输入,直到没有更多输入可用。因此,您希望拥有的内容仅在循环体内可用。

退出循环的最后一个循环将user_input设置为空。

如果你想逐行收集流中的所有输入,你可能有一个额外的变量来读取该行:

    std::string line;
    while (std::getline(inbound_filestream,line)) {
        user_input += line;
    }