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

die*_*ell 10 c++ string

我在一个文本文件中有这个:

John 20 30 40
mike 30 20 10
Run Code Online (Sandbox Code Playgroud)

我如何从文本文件中读取并将它们分成变量名称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;
}
Run Code Online (Sandbox Code Playgroud)

编辑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;
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

John203040

mike302010

302010
Run Code Online (Sandbox Code Playgroud)

为什么另一个302010 ???

Pla*_*mer 11

这样的东西应该工作(我没有编译器方便,所以你可能需要稍微调整一下):

#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;
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:刚看到这个,我不知道为什么我之前选择了get line方法.以下(更简单的解决方案)不起作用吗?

#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”;
    }
}
Run Code Online (Sandbox Code Playgroud)