C++ 使用getline连续输入行,以结束txt文档C++;

C++ 使用getline连续输入行,以结束txt文档C++;,c++,input,getline,C++,Input,Getline,我有一个很长的.txt文件,我想使用getline将其流式处理。我想输入整个文本文档,然后运行一个过程 然后,我想使用不同的值在相同的过程中运行新字符串,依此类推2次 到目前为止我有 #include <iostream> #include <fstream> #include <string> using namespace std; void flag(string & line, int len); void cut(string &

我有一个很长的.txt文件,我想使用
getline
将其流式处理。我想输入整个文本文档,然后运行一个过程

然后,我想使用不同的值在相同的过程中运行新字符串,依此类推2次

到目前为止我有

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

using namespace std;

void flag(string & line, int len);
void cut(string & line, int numb);

int main()
{
    string flow;
    ifstream input;
    ofstream output;
    input.open(filename.c_str()); //filename ...

    output.open("flow.txt");

    while (!input.fail())
        getline(input, flow);
    flag(flow, 10);
    flag(flow, 20);
    cut(flow, 20);
    cut(flow, 3);

    output << flow;

    return 10;
}
//procedures are defined below.
#包括
#包括
#包括
使用名称空间std;
无效标志(字符串和行,整数长度);
空切(线和线,内部编号);
int main()
{
串流;
ifstream输入;
流量输出;
input.open(filename.c_str());//文件名。。。
output.open(“flow.txt”);
而(!input.fail())
getline(输入、流);
标志(流量,10);
标志(流量,20);
切割(流量,20);
切割(流量,3);
输出而不是这个:

while(!input.fail())
getline(input, flow);
flag(flow, 10); 
flag(flow, 20); 
cut(flow, 20);
cut(flow, 3);
你可能想要这个:

while(getline(input, flow)) {
    flag(flow, 10); 
    flag(flow, 20); 
    cut(flow, 20);
    cut(flow, 3);
}
除非我误解了您的意思,您希望先读取整个文件,然后调用
flag
cut
。在这种情况下,您需要附加您读取的字符串:

string data;
while(getline(input, flow))  data += flow + '\n'; // add the newline character
                                                  // because getline doesn't save them

flag(data, 10); 
flag(data, 20); 
cut(data, 20);
cut(data, 3);
请注意,
getline
将覆盖传递给它的字符串


另外,
while(!input.fail())
是循环条件的一种不良形式。可能发生的情况是,没有任何可用的输入,但流仍然没有处于失败状态。在这种情况下,最后一次迭代将处理无效的输入。

删除
return
语句。@AlexChamberlain:为什么?!
return
不在
循环中。
这就是为什么你应该总是使用
{}
!@AlexChamberlain:是的,最好使用
{}
并缩进代码,但删除
返回值与此无关。
@MM。是的,但这就是我误读它的原因。您的第一个解决方案会一次读取一行,并在执行过程中通过每个过程运行它吗?@user2162690是的,没错。我应该通过第一个过程运行整个.txt文件,然后通过第二个过程,依此类推。这是你的第二个案例吗?是的。你的代码的问题是它没有保存文件,它只是逐行读取,覆盖每次迭代的
flow
,最终只剩下最后一行。啊,是的,我明白了,这是有意义的