Как читать int и char из файла в массив
Файл имеет такие значения
BECDCBAADEBACBAEDDBEDCBAAECDCB
1234 BECDXACDXAXDXEDBXCABCDEXX
Первая строка-это правильные ответы, которые должны быть сравнены с ответами во второй (имеет только одну строку из-за причин тестирования), а целое число-это идентификатор.
Что я уже пробовал:
#include <iostream> #include <fstream> using namespace std; int main(){ char right[30],r; char n=0,m=0; char answers[30],a; int id[30],i=0; ifstream infile; infile.open("exam.txt"); ofstream outfile; outfile.open("report.txt"); if (!infile.is_open()) cout<<"Error opening file. Aborting...."; if (!outfile.is_open()) cout<<"Error opening file. Aborting...."; infile>>r; while (!infile.eof()&& n<30 && i<30){ right [n] = r; infile>>id[i]; cout<<right [n]; cout<<id[i]; n++; m++; }
Richard Andrew x64
Это почти хороший вопрос, потому что он содержит проблему и то, что было опробовано. Но в нем отсутствует важнейшая составляющая того, в чем именно заключается вопрос. Что он должен делать, и что он делает неправильно?
Member 13068214
О вот и вся штука
Экзамен с множественным выбором состоит из тридцати вопросов. Каждый вопрос имеет пять вариантов, обозначенных как A, B, C, D и E. Первая строка данных содержит правильные ответы на тридцать вопросов в первых 30 позициях символов, например:
BECDCBAADEBACBAEDDBEDCBAAECDCB
Каждая последующая строка содержит ответы для кандидата. Данные в строке состоят из числа кандидата (целого числа), за которым следует один или несколько пробелов, а затем тридцать ответов, данных кандидатом в следующих тридцати последовательных позициях символов. X используется, если кандидат не ответил на частичный вопрос. Вы можете предположить что за номером кандидата следует 30 действительных ответов примерная строка выглядит следующим образом:
1234 BECDXACDXAXDXEDBXCABCDEXX
Есть неизвестное количество кандидатов. Строка, содержащая номер кандидата 0, указывает только на конец данных.
Member 13068214
Дело в том, что я пытаюсь прочитать правильные ответы на массив, но получаю ошибку, когда добираюсь до следующей строки с целыми числами, и я также читаю пустые места, когда я должен игнорировать их.
Richard MacCutchan
Было бы гораздо проще просто прочитать каждую строку в массиве за один раз, используя getline().
Member 13068214
Я не могу использовать getline (). Я провожу курс программирования для начинающих
Richard MacCutchan
Затем вам нужно найти какой-то способ узнать, когда вы достигли конца каждой строки, и перейти к следующей. То, что вы закодировали выше, похоже, не делает того, что вы хотите. В общем, всегда лучше сначала попытаться прочитать и проанализировать ваши входные данные и сохранить их в некоторых контейнерах в вашем коде. После того, как вы захватили информацию, вы можете обработать ее любым необходимым способом, прежде чем записывать свои результаты.