Сохранить строку в переменную в следующей строке файла - PullRequest
0 голосов
/ 17 января 2020

Я только что начал рефрагировать sh себя в библиотеке <fstream> в C ++, и я пытаюсь сохранить первую строку моего текстового файла в 3 целочисленных переменных, разделенных пробелами. Во второй строке текстового файла есть строка, и я пытаюсь получить строковую переменную для ее хранения. Однако я не уверен, как go перейти к следующей строке файла. Файл выглядит следующим образом:

5 10 15
My name is Luke

Я знаю, как использовать getline для получения всей строки, а затем go для следующей, но я не сохраняю первую строку в одну переменная, но 3, поэтому я не могу использовать getline() для этого. Вот мой код.

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

int main(int argc, char **argv)
{
    ifstream inFile;
    ofstream outFile;

    string name;
    int x,y,z;

    outFile.open("C:\\Users\\luked\\Desktop\\Test.txt");
    outFile << 5 << " " << 10 << " " << 15 << endl << "My name is Luke";
    outFile.close();

    inFile.open("C:\\Users\\luked\\Desktop\\Test.txt");
    inFile >> x >> y >> z;
    getline(inFile, name);
    cout << x  << " " << y << " " << z << " " << endl << name;

    return 0;
}

Ответы [ 3 ]

1 голос
/ 17 января 2020

std::getline читает до тех пор, пока не встретит разделитель или конец файла, который здесь является новой строкой сразу после

5 10 15\n
        ^
// you need to ignore this

. Вы можете проигнорировать его с помощью

inFile.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
getline(inFile, name);
1 голос
/ 17 января 2020

У вас есть несколько вариантов:

Вы можете прочитать 3 целых числа, используя operator>>, затем ignore() ifstream, пока не пропустите новую строку, затем вы можете использовать std::getline() для прочитайте вторую строку:

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

int main(int argc, char **argv)
{
    ifstream inFile;
    ofstream outFile;

    string name;
    int x,y,z;

    outFile.open("C:\\Users\\luked\\Desktop\\Test.txt");
    outFile << 5 << " " << 10 << " " << 15 << "\n" << "My name is Luke";
    outFile.close();

    inFile.open("C:\\Users\\luked\\Desktop\\Test.txt");
    inFile >> x >> y >> z;
    infile.ignore(numeric_limits<streamsize>::max(), '\n');
    getline(inFile, name);
    cout << x  << " " << y << " " << z << " " << endl << name;

    return 0;
}

В противном случае, несмотря на ваше утверждение, что «я не могу использовать getline () для [1-й строки]», вы МОЖЕТЕ фактически использовать std::getline() для чтения 1-й строки. Просто используйте std::istringstream впоследствии, чтобы прочитать целые числа из этой строки. Затем вы можете использовать std::getline() для чтения 2-й строки:

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

int main(int argc, char **argv)
{
    ifstream inFile;
    ofstream outFile;

    string line, name;
    int x,y,z;

    outFile.open("C:\\Users\\luked\\Desktop\\Test.txt");
    outFile << 5 << " " << 10 << " " << 15 << "\n" << "My name is Luke";
    outFile.close();

    inFile.open("C:\\Users\\luked\\Desktop\\Test.txt");
    getline(inFile, line);
    istringstream(line) >> x >> y >> z;
    getline(inFile, name);
    cout << x  << " " << y << " " << z << " " << endl << name;

    return 0;
}
1 голос
/ 17 января 2020
...