C编程新手 - 卡在字符串赋值上

时间:2016-09-16 08:27:27

标签: c

我正试图在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;
}

3 个答案:

答案 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 变量。