我正试图在C中建立一个快速程序(我刚接触过这个程序)。它允许用户首先定义一些问题和可能的答案,然后程序询问问题。在最终版本中,如果答案是正确的,则询问下一个问题,否则程序结束。
这是我去那里的距离,但我不确定一切是否正确(我仍然有点困惑,需要为每个定义的变量分配哪个大小(我把5个用于&#) 34;回答"但不确定为什么!)。当问到第3个问题时,程序表现得很奇怪(它没有正确显示)。有人可以建议吗?
#include <stdio.h>
#include <string.h>
struct Quest {
char title[255];
char option1[255];
char option2[255];
char answer[5];
};
int main( ) {
int i;
char name[255];
char user_answ[5];
struct Quest Question[2];
for(i=0; i<3; i++)
{
printf("Enter q%d title:\n", i+1);
fgets(Question[i].title,sizeof(Question[i].title),stdin);
printf("Enter q%d option1:\n", i+1);
fgets(Question[i].option1,sizeof(Question[i].option1),stdin);
printf("Enter q%d option2:\n", i+1);
fgets(Question[i].option2,sizeof(Question[i].option2),stdin);
printf("Enter q%d answer:\n", i+1);
fgets(Question[i].answer,sizeof(Question[i].answer),stdin);
}
/* Ask Name */
printf("What is your name?\n");
fgets(name,sizeof(name),stdin);
printf("Hi %s! \n",name);
for(i=0; i<3; i++){
printf( "%s\n", Question[i].title);
printf( "1: %s\n", Question[i].option1);
printf( "2: %s\n", Question[i].option2);
printf( "Please enter your answer\n");
fgets(user_answ,sizeof(user_answ),stdin);
printf( "Your answer is %s\n",user_answ);
printf( "The right answer is %s\n",Question[i].answer);
}
return 0;
}
答案 0 :(得分:3)
struct Quest Question[2];
写这个你采取了一个有2个成员的结构数组。它们被标识为Question[0]
和Question[1]
。但是当你从i = 0到i = 2运行循环时,Question[2]
将无法使用。
所以写下:for(i=0; i<2; i++)
。现在循环将运行i = 0且i = 1。
答案 1 :(得分:2)
您需要输入三个问题,然后输出三个问题。但是,您只为 两个 问题创建了一个数组。
创建数组时,方括号([]
)中的值是数组中元素的数量,而不是顶部索引。
现在发生的事情是你超出了你拥有的数组范围,你将体验未定义的行为。
答案 2 :(得分:1)
struct Quest Question[2];
您只有两个问题的数组,您无法填写并显示3。
将2更改为3。
你可以看到这就像告诉编译器
创建一个变量名问题,其中包含 2个类型 struct Quest
的变量
当然这有点简化,但你可以理解你需要 3 变量。