class Question
{
public:
void showQuestion();
bool checkAnswer(string givenAnswer);
void showAnswer();
void markCorrect();
private:
string level;
string questionText;
string answerText;
bool correct;
};
class Quiz
{
public:
bool loadQuestions(string dataFileName);
void dumpQuestions();
int deliverQuiz();
private:
vector<Question> questions;
};
我在这里有两个课,问题和测验,我需要阅读一个文本文件,其中包含问题,答案等。读完文件后,我需要将变量存储到矢量中。我尝试了几件事,创建了一个Question对象矢量并将其存储在其中。但是,我相信我需要创建一个Quiz对象并将它们存储在私有向量中。我很困惑如何将变量存储到测验向量对象中,或者它的语法是什么样的。
换句话说,创建一个Question Object向量并将其存储在其中是有意义的。然而,似乎我需要创建一个测验对象向量,并将变量存储在其中,我只是不确定如何去做。
以下是我输入文件格式的示例,名为questions.txt
S|1|What is the capital of Italy|Rome
S|1|What is the capital of France|Paris
答案 0 :(得分:0)
然而,我似乎需要创建一个测验对象向量,并将变量存储在
中
我认为你不需要这样做。在您的示例中,您有1个测验,其中包含许多问题。这是有道理的,所以我认为你不需要去创建测验对象矢量。
我需要阅读一个文本文件,在阅读文件后会有问题,答案等,我需要将变量存储到矢量中。
这是一种通过实现您定义的Question
方法填充Quiz::loadQuestions()
个对象的方法的方法。您需要提供对Question
对象的私有成员的访问权限,以便正确检索和填充它们(提供访问者和变更器)。
void Question::setLevel( const int theLevel )
{
level = theLevel;
}
void Question::setQuestion( const std::string & question )
{
questionText = question;
}
等等。一旦你完成了这个,并给出了你的输入文件格式,你就可以这样填充。
bool Quiz::loadQuestions( const std::string & fileName )
{
std::ifstream infile(fileName.c_str());
if (infile.is_open())
{
std::string line;
while (std::getline(infile, line))
{
std::stringstream ss(line);
std::string token;
Question temp;
std::getline(ss, token, '|'); // Type (don't care?)
std::getline(ss, token, '|'); // Level
int level = atoi(token.c_str());
temp.setLevel(level);
std::getline(ss, token, '|'); // Question
temp.setQuestion(token);
std::getline(ss, token, '|'); // Answer
temp.setAnswer(token);
// store populated Question object for Quiz
questions.push_back(temp);
}
}
return (!questions.empty());
}