Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.02.2014, 15:49   #1
DaiHajime
Новичок
Джуниор
 
Регистрация: 27.02.2014
Сообщений: 5
По умолчанию присвоение переменной строки файла С++

Доброе время суток! У меня возникла проблема при написании кода для программы тест-экзаменатора, а именно в присвоении переменной строки файла
Суть в том, что нужно присвоить строки файла двумерному массиву
Вот мой код:
Код:
char sq[255];
	ifstream quest("C:\\TEST\\quest.txt");
	if (!quest){
	ShowMessage("Файл не удаётся открыть");
	return;}
	while (!quest.eof()){
	quest.getline(sq,255);
	for(k=0;k<50;k++){
	v[k]=(AnsiString)sq ;}
	for(n=0;n<10;n++){
	for(j=0;j<5;j++){
	q[n][j]=v[k];}}
	}
P.S. это только та часть, в которой нужно провести присвоение

Последний раз редактировалось Stilet; 27.02.2014 в 16:02.
DaiHajime вне форума Ответить с цитированием
Старый 27.02.2014, 16:03   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Что находится в файле, и какого типа элемент матрицы?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.02.2014, 09:40   #3
DaiHajime
Новичок
Джуниор
 
Регистрация: 27.02.2014
Сообщений: 5
По умолчанию

Вопросы и варианты ответов
Суть в том, что переменная n является номером вопроса, а переменная j указывает на вопрос (при значении 0) и варианты ответа (при значении от 1-4) элемент матрицы типа String или AnsiString
Form2->Label5->Caption=q[n][0]; //вопрос
Form2->Label1->Caption=q[n][1]; //вариант 1
Form2->Label2->Caption=q[n][2]; //вариант 2
Form2->Label3->Caption=q[n][3]; //вариант 3
Form2->Label4->Caption=q[n][4]; //вариант 4
Вложения
Тип файла: txt quest.txt (975 байт, 130 просмотров)

Последний раз редактировалось DaiHajime; 28.02.2014 в 10:19.
DaiHajime вне форума Ответить с цитированием
Старый 28.02.2014, 09:45   #4
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Сразу вопрос: а как отмечается в базе верный вариант ответа?

Я писал тесты, постучись в аську, может чего и насоветую толкового.
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 28.02.2014, 09:53   #5
DaiHajime
Новичок
Джуниор
 
Регистрация: 27.02.2014
Сообщений: 5
По умолчанию

верный вариант ответа определяется из другого файла по средству сравнения, но там однамерный массив, поэтому проблем не возникло
DaiHajime вне форума Ответить с цитированием
Старый 28.02.2014, 10:36   #6
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Ну у меня заполнялся массив вопросов из файла следующим образом:
Код:
  while (not(Eof(questionsFile))) do
  begin
    readln(questionsFile,tmp_str);
    if (tmp_str = 'st') then
      begin
        readln(questionsFile,tmp_str);
        numberOfQuestion := Length(allQuestionsArray);
        SetLength(allQuestionsArray,Length(allQuestionsArray)+1);
        tmp_str_2 := copy(tmp_str,1,1);
        allQuestionsArray[numberOfQuestion].typeOfQuestion := StrToInt(tmp_str_2);
        Delete(tmp_str,1,2);
        allQuestionsArray[numberOfQuestion].questionString := tmp_str;
        answ_number := 0;
        while true do
        begin
          readln(questionsFile,tmp_str);
          if (tmp_str = 'ed') then break;
          answ_number := answ_number + 1;
          allQuestionsArray[numberOfQuestion].numberOfAnswers := answ_number;
          if allQuestionsArray[numberOfQuestion].typeOfQuestion <> 3 then
            begin
              tmp_str_2 := copy(tmp_str,1,1);
              Delete(tmp_str,1,2);
              allQuestionsArray[numberOfQuestion].type1Or2Answers[answ_number] := tmp_str;
              if (tmp_str_2[1] = '+') then
                allQuestionsArray[numberOfQuestion].type1Or2AnswersMask[answ_number] := true
              else
                allQuestionsArray[numberOfQuestion].type1Or2AnswersMask[answ_number] := false;
            end
          else
            begin
              tmp_space_pos := pos(' ',tmp_str);
              tmp_str_2 := copy(tmp_str,1,tmp_space_pos-1);
              Delete(tmp_str,1,tmp_space_pos);
              allQuestionsArray[numberOfQuestion].type3Answers[answ_number][1] := tmp_str_2;
              allQuestionsArray[numberOfQuestion].type3Answers[answ_number][2] := tmp_str;
            end;
        end;
      end;
  end;
В файле содержатся 3 типа вопросов (выбор одного/нескольких вариантов и соответствия). Вопросы целиком описываются в файле, правильные ответы отмечаются в нем же.
Структура вопроса:
Код:
st
# _question_ 
- _answ_1
- _answ_2
- _answ_3
+ _answ_4
- _answ_5
ed
Где 'st' - индикатор начала вопроса, 'ed' - конца. # - тип вопроса (1, 2 или 3). _question_ - сам вопрос, _answ_* - ответы. + или - перед ответом - верный или неверный вариант ответа соответственно.
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 28.02.2014, 10:38   #7
DaiHajime
Новичок
Джуниор
 
Регистрация: 27.02.2014
Сообщений: 5
По умолчанию

а есть вариант на с++?
DaiHajime вне форума Ответить с цитированием
Старый 28.02.2014, 10:51   #8
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Неа, заказчик Delphi хотел.

Смотри, алгоритм "на пальцах":
0) Читаем, пока не eof()
1) Найти начало вопроса (метка st в моем случае).
2) Считать следующую строку. Заранее известно, что первый её символ - тип вопроса, потом пробел, потом текст вопроса. Соответственно запоминаем тип, сохраняем текст вопроса.
3) Начинаем в цикле читать строки
3.0) Считали метку ed - брякаем цикл, вопрос считан полностью.
3.1) Если тип вопроса - один/несколько вариантов ответа - считываем первый символ (индикатор правильности ответа) и текст варианта ответа, вносим в массив.
4) goto 0
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 28.02.2014, 11:03   #9
DaiHajime
Новичок
Джуниор
 
Регистрация: 27.02.2014
Сообщений: 5
По умолчанию

ну хоть алгоритм есть
DaiHajime вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Присвоение значения ячейки переменной VoSKreS Microsoft Office Excel 1 01.07.2013 18:30
Поиск и присвоение переменной слова demiancz Общие вопросы Delphi 3 04.05.2013 07:56
Присвоение переменной значения из массива Maxx Microsoft Office Excel 4 21.07.2010 13:53
Присвоение переменной gajubas PHP 1 21.04.2010 20:18