我有一个实验室可以做家庭作业,我想知道是否有人可以帮我解决这个问题。该程序一直说我的变量已损坏。如果有人能帮助我,这将是伟大的。顺便问一下这个问题大声笑。
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;
}
答案 0 :(得分:2)
问题是answer
的数据类型为char
,但scanf()
被告知将其视为长度为(至少)2的字符数组。这会导致{scanf()
1}}将变量写入内存中发生的任何事情。在这种情况下,没有其他变量可以乱写,它可能会破坏程序的堆栈。
有几种方法可以解决这个问题。
代码还有其他一些问题:
y
或n
进行回答。在编写程序时,它会接受X
和7
作为“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()
。
希望这有帮助!