C++:从文本文件中读取并分离变量

13

我有一个文本文件:

John 20 30 40
mike 30 20 10

我该如何从文本文件中读取内容并将其分别存储到变量var1、var2、var3中呢?下面是我尝试过的代码,但好像无法实现。请帮忙看看。

#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
using namespace std;

int main () {
  string name,result;
  int number1;
  ifstream myfile ("marks.txt");
  if (myfile.is_open())
  {
    while ( !myfile.eof() )
    {
      getline (myfile,name,'\t');
      getline (myfile,var1,'\t');
      getline (myfile,var2,'\t');
      getline (myfile,var3,'\t');
      cout << name << var1 << var2 << var3;


    }

    myfile.close();

  }

  else cout << "Unable to open file";

  return 0;
}

编辑1:

Nocturne 建议:

#include <iostream>
#include <fstream>
#include <sstream>
using namespace std;


int main()
{
    ifstream inputFile("marks.txt");
    string line;

    while (getline(inputFile, line))
    {
        istringstream ss(line);

        string name;
        int var1, var2, var3;

        ss >> name >> var1 >> var2 >> var3;
        cout << name << var1 << var2 << var3 << endl << endl;
    }
}

输出:

John203040

mike302010

302010

为什么还要另一个302010?

你的输入文件是否一定是以制表符分隔的?你得到了什么输出? - Oliver Charlesworth
“似乎它不起作用”并不有帮助,请提供更多细节。 - JoshD
“似乎它不起作用”并不是问题的充分描述。是什么症状导致您得出这个代码没有按照您的期望工作的结论?您是否尝试过附加调试器以逐步执行程序并查看哪些部分未能正确工作? - James McNellis
3个回答

16

类似这样的代码应该可以运行(我手头没有编译器,因此您可能需要稍微调整一下):

#include <iostream>
#include <sstream>
using namespace std;


int main()
{
    ifstream inputFile("marks.txt");
    string line;

    while (getline(inputFile, line))
    {
        istringstream ss(line);

        string name;
        int var1, var2, var3;

        ss >> name >> var1 >> var2 >> var3;
    }
}

编辑:刚刚再次看到这个问题,我不知道为什么之前选择了使用getline方法。下面的(更简单的)解决方案不是更好吗?

#include <fstream>
using namespace std;

int main()
{ 
    ifstream fin(“marks.txt”);

    string name;
    int var1;
    int var2;
    int var3;

    while (fin >> name >> var1 >> var2 >> var3)
    {
        /* do something with name, var1 etc. */
        cout << name << var1 << var2 << var3 << “\n”;
    }
}

Nocturne,您的工作正常。我添加了#include <fstream>和cout << name << var1 << var2 << var3 << " "; 它打印出John203040 Mike302010 302010 为什么还有另一个302010??? - diehell
你的文件末尾必须有一个空行。 - Debajit

4

看起来您需要声明var1、var2和var3。

另外,应该改为:

      getline (myfile,name,'\t');
      getline (myfile,var1,'\t');
      getline (myfile,var2,'\t');
      getline (myfile,var3,'\t');

试试这个:

  myfile >> name;
  myfile >> var1;
  myfile >> var2;
  myfile >> var3;

并不是因为原来的方法有错误,而是第二种更加简洁,并且能够处理所有空格。


0

我认为当数字以没有空格的组合形式打印时,原因只是因为需要在变量之间加上空格,如下所示:

cout << name << " " << var1 << " " << var2 << " " << var3 << "\n";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接