C++ 使用getline连续输入行,以结束txt文档C++;
我有一个很长的.txt文件,我想使用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 &
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
,最终只剩下最后一行。啊,是的,我明白了,这是有意义的