我想用这样的结构在c中制作一个带有多项选择题的程序:
struct exam
{
char quest[50];
char ans1[20];
char ans2[20];
char ans3[20];
int correct_answer;
};
struct exam question[3];/*number of multiple choices*/
我的代码有什么问题吗?
我不确定如何填充结构。
如果您的所有数据都将保持不变,则可以使用以下内容:
struct question {
const char *prompt;
const char *answers[3];
int correct_answer;
};
然后您可以设置一系列问题,如下所示:
const struct question questions[] = {
{ "Kernighan & who?", { "Ritchie", "Stroustrup", "Torvalds" }, 0 },
{ /* next question ... */
};
如果我要这样做,我可能会在字符串中编码正确答案,即以“'*'
或”开头的正确答案。当然,处理(打印和比较)答案的代码需要考虑到这一点。
您的问题提到了 C++。你这样做的方式在 C 中是可以的(除了答案应该是一个数组的事实)。
但是这种实现在 C++ 中是不可接受的,因为有更好的方法来做到这一点:
struct question {
std::string prompt;
std::vector<std::string> answers;
int correct_answer;
};
也就是说,使用内置的容器和字符串类。
struct exam question[3];
以这种方式定义question
,这意味着您正在定义 3 个元素的数组。数组中的每个元素都是一个exam
结构
它可以像这样填充:
strcpy(question[0].quest, "What's the name of The President?");
strcpy(question[0].ans1, "name 1");
strcpy(question[0].ans2, "name 2");
strcpy(question[0].ans3, "name 3");
question[0].correct_answer = 2;
strcpy(question[1].quest, "What's the surname of The President?");
strcpy(question[1].ans1, "surname 1");
strcpy(question[1].ans2, "surname 2");
strcpy(question[1].ans3, "surname 3");
question[1].correct_answer = 3;
你也可以这样填写:
struct exam question[3] = {
{"What's the name of The President?", "name 1", "name 2", "name 3",2}
{"What's the surname of The President?", "surname 1", "surname 2", "surname 3",3}
{"What's any thing?", "any thing 1", "any thing 2", "any thing 3",3}
}