所以我有一个类似这样的数据文件:
x + y + z
30 45 50
10 20 30
我需要的唯一字符是运算符,所以'+''+'我能够使用file.get()
成功获取这些字符并将它们放入数组中。问题是我需要获取下一行数字,并将它们分配给值x,y z。我知道我不能使用.get(),我必须使用getline
。我是否必须删除file.get()
并使用getline
代替第一部分?
我看了一下这里发布的一些问题,但没有一个像地雷一样。 注意我实际上是将这些值用于我的程序的另一部分,只是使用cout
来查看我的值是否正确读取
这是我以前的代码:
main(int argc, char *argv[])
{
int a=0;
int n;
fstream datafile;
char ch;
pid_t pid;
int a, b, c, result;
string line;
datafile.open("data1.txt");
if(datafile)
{
for(int i=0; i <9; i++)
{
datafile.get(ch);
if (ch == '*'||ch == '/'||ch == '+'||ch == '-')
{
operations[a] = ch;
cout<<operations[a];
a++;
}
}
}
else
cout<<"Error reading file";
}
所以这就是我在开始时获取文件第一行的方式。它像我想要的那样工作,可能不是最好的编码,但它有效。尽管如此,我还是尝试使用getline
来获取文件的其余部分,但是我没有得到数字,而是获得了一堆随机的乱码/数字。我知道如果我使用getline
,第一行不能在我的循环中。我知道这就是我得到数字的方式。
while(getline(datafile, line))
{
istringstream ss(line);
ss >> x >> y >> z;
cout<<x<<""<<y<<""<<z;
}
答案 0 :(得分:2)
第一行是否有意义,或者我错过了什么:
string input;
std::getline(datafile, input)
for (int i = 0; i < input.size(); i++)
if (input[i] == '+' || ...)
{
operations[a] = input[i];
a++;
}
如果你不想使用getline,你可以简单地阅读整个文件流(注意bool是一种相当天真的方法来处理这个问题,我建议在你的实际代码中使用更优雅的东西):< / p>
bool first = true;
string nums;
int lines = 0;
vector<vector<int>> numlines;
vector<int> topush;
while (!datafile.eof())
{
char ch = datafile.get()
if (ch == 12 && first) //I don't know if '\n' is valid, I'd assume it is but here's the sure bet
first = false;
else if (first && (ch == '+' || ...))
{
operator[a] = ch;
a++;
}
else if (!first && (ch >= '0' && ch <= '9'))
{
if (!(datafile.peek() >= '0' && datafile.peek() <= '0'))
{
numlines[lines].push_back(atoi(nums.c_str());
nums.clear();
if (datafile.peek() == 12)
{
numlines.push_back(topush);
lines++;
}
}
else
nums = nums + ch;
}
老实说,我无法确定上述内容是否完全正确,我建议您只修改代码以专门使用getline。你需要添加#include来获取atoi。
答案 1 :(得分:0)
将此添加到您的代码中:
while(!datafile.eof()){
string s;
getline(datafile, s);
istringstream in(s);
string tmp;
while(in >> tmp){
int i = stoi(tmp)
//Do something with i....
}
}