2016-03-23 3 views
1

Я нахожусь в центре проекта колледжа, который выглядит как база данных студентов. Каждая строка текстового файла следует этой «модели»:C++: cin с пробелами до строк без функции getline

age ; full_name ; avg 

Мне нужно прочитать текстовый файл и сохранить все в векторе и структур я мог бы сделать это, если имя было только одно слово. Ну, очевидно, возраст - это int, avg - двойное, но как насчет полного имени? Я не могу просто использовать file >> full_name;, причем full_name является строкой, потому что она перестанет читать ее, как только она попадет в пробел. Функция getline() сохранит все в одном месте, поэтому я не уверен, что делать.

Пожалуйста, поделитесь своим knowlegde с этим молодым умом х)

+0

[Сильно связанная] (http://stackoverflow.com/questions/23047052/why-does-reading-a-record-struct-fields -из-stdistream-отказоустойчивость и-как-может-я-р). –

+1

'std :: getline' может использовать пользовательский разделитель, эти'; 'выглядят так, как будто они могут пригодиться :) – melak47

+0

Очень похожая проблема. Но я не понял, что это за решение. Я не хочу использовать более одной строки для имени, потому что может иметь переменное количество слов. Кроме того, переупорядочение файла не является вариантом. –

ответ

1

Как и многие другие отметили, вы можете использовать std::getline читать символы до разделителя.

Рассмотрим следующий фрагмент кода в качестве отправной точки:

int age; 
std::string name; 
double average; 

// ... Open the file which stores the data ... 

// then read every line. The loop stops if some of the reading operations fails 
while (input >> age && 
     std::getline(input, name, ';') &&  // consume the first ; 
     std::getline(input, name, ';') &&  // read the name 
     input >> average) { 
    // do whatever you need with the data read 
    cout << "age: " << age << " name: " << name << " average: " << average << '\n'; 
} 
Смежные вопросы