C ++: чтение из текстового файла и разделение на переменные - PullRequest
10 голосов
/ 16 октября 2010

У меня есть это в текстовом файле:

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:

Ноктюрн Предложение:

#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 ???

Ответы [ 3 ]

11 голосов
/ 16 октября 2010

Что-то вроде этого должно работать (у меня нет под рукой компилятора, так что вам, возможно, придется немного подправить это):

#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;
    }
}

Редактировать: Просто видел это снова, я не знаюпочему я выбрал подход 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”;
    }
}
4 голосов
/ 16 октября 2010

Похоже, вам нужно объявить 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 голосов
/ 18 августа 2018

Я думаю, что когда числа были распечатаны в группе без пробелов, причина была в том, что вам нужно поместить пробелы между переменными, например:

cout << name << " " << var1 << " " << var2 << " " << var3 << "\n";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...