我正在阅读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;
}
答案 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;
}