Как читать чередующиеся строки текста в файле для разделения массивов в C ++?

Задание состоит в том, чтобы сделать тестового грейдера. Первая строка файла — это все ответы
и следующие строки чередуются между именами учащихся (ПОСЛЕДНИЕ, ПЕРВЫЕ), и они представляют собой ответы в следующей строке. Я могу передать ответы тестового ключа, но когда я пытаюсь использовать функцию getline (), она не сохраняет значение в первом индексе массива, а cin.ignore () просто вызывает зависание моей программы. Куда мне идти отсюда?

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

typedef char answerKey[30];
typedef string studentNames[25];

int main()
{

fstream inFile;

inFile.open("xfile.txt");
if (!inFile)
{
cout << "ERROR FILE NOT FOUND" << endl;
return (EXIT_FAILURE);
} else {

for (int i = 0; i < 30; i++)
inFile >> answerKey[i];

getline(inFile, studentNames[0]);

cout << studentNames[0];
}
}

Выход нулевой.

0

Решение

При переключении между форматированным и неформатированным вводом-выводом обычно требуется избавиться от пробелов в начале! Форматированный ввод (т.е. при использовании operator>>()) пропускает начальные пробелы (вы можете отключить это, используя std::noskipws но это редко полезно). С другой стороны, неформатированный ввод, например, std::getline(), не пропускает ведущие пробелы. Так как форматированный ввод чисел останавливается в тот момент, когда в потоке отсутствует номер, например, в пробеле или новой строке, пробел остается, когда std::getline() называется: конец строки с ответами четко обозначен новой строкой. std::getline() остановится на этой самой новой строке, что, вероятно, означает, что никакие символы не сохраняются и извлекается только новая строка.

Самый простой способ использовать лидирующие пробелы — использовать std::ws манипулятор, например:

if (std::getline(inFile >> std::ws, studentNames[0])) {
// process the student name
}

(поскольку ввод всегда может быть неудачным, я не могу заставить себя опустить проверку на успешность ввода).

Если вы хотите лучше контролировать, например, пропускать пробелы до и включая новую строку, но не пробелы после этого, вам потребуется индивидуальный подход для пропуска пробелов. Это не так сложно сделать, хотя.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector