我收到了一个损坏的变量错误

时间:2012-06-04 01:12:06

标签: c

我有一个实验室可以做家庭作业,我想知道是否有人可以帮我解决这个问题。该程序一直说我的变量已损坏。如果有人能帮助我,这将是伟大的。顺便问一下这个问题大声笑。

int main (void)
{
char answer;

printf("welcome to the celebrity look alike game. You will be asked 5 yes or no questions. To answer please either put a y for yes or an n for no");
printf("\nQuestion 1: Do you have brown eyes?");
scanf("%1s", &answer);
if (answer=='y')
    {printf("\nQuestion 2:Do you have white hair?");
    scanf("%1s", &answer);
    if (answer=='y')
        printf("\nQuestion 3:Is your height around 5 feet 10 inches?");
        scanf("%1s", &answer);
        if (answer=='y')
            printf("\nQuestion 4:Are you a slim man?");
            scanf("%1s", &answer);
            if (answer=='y')
                printf("\nQuestion 5: Do you dress well?");
                scanf("%1s", &answer);
                if (answer=='y');
                    printf("You really look like Matt Leblanc!");}
else printf("Sorry, you do not look like this celebrity.");

return 0;
}

3 个答案:

答案 0 :(得分:2)

问题是answer的数据类型为char,但scanf()被告知将其视为长度为(至少)2的字符数组。这会导致{scanf() 1}}将变量写入内存中发生的任何事情。在这种情况下,没有其他变量可以乱写,它可能会破坏程序的堆栈。

有几种方法可以解决这个问题。

代码还有其他一些问题:

  • if..then..else结构存在缺陷。它不会显示“看起来不像这个名人”的消息,除非除了最后一个条件都是真的。
  • 缩进不会确定语句嵌套。您必须明确使用花括号来对语句进行分组。
  • 为了预测处理用户输入,您可能希望坚持使用yn进行回答。在编写程序时,它会接受X7作为“no”的同义词。

答案 1 :(得分:1)

您需要将scanf("%1s", &answer);更改为scanf("%c", &answer);。前者将尝试读取字符串,这需要两个字符 - 一个读取,空字符终止字符串。后者只是读一个角色。

由于answer只有一个字符,因此读取字符串会损坏您的记忆。

答案 2 :(得分:0)

我认为问题在于您使用scanf如下:

scanf("%1s", &answer);

虽然您的变量answer只是一个char。请记住,C字符串始终以空字符结尾,因此只包含一个字符的字符串将需要存储两个字符 - 字符本身和空终止符。因此,当您尝试将该字符串存储在单个字符中时,最终会在char变量之后立即删除内存,因为scanf正在尝试在其中放置空字符。

要解决此问题,请将answer的声明更改为char answer[2],或更改scanf以便您阅读单个字符:

scanf("%c", &answer);

或者使用getchar()

希望这有帮助!