for
循环只运行一次,在用scanf
输入答案后,for
循环终止。我不知道为什么?
for(int i = 0; i < 10; i++){
char answer;
gotoxy(32,10); //self-made function(using Dev C++) to go to a coordinate
star_vowels(easy[i]);
gotoxy(30,18);
printf("ANSWER: ");
scanf("%s", &answer);
}
答案 0 :(得分:2)
answer 变量被定义为字符,因此您应该更改scanf函数的格式字符串:
scanf("%c",&answer);
答案 1 :(得分:1)
问题可能是因为你的缓冲区溢出。
您定义的变量answer
只能存储一个char
。然而,您将其传递给scanf
以扫描字符串。如果您只输入一个字符并按Enter键,则表示您已经溢出answer
,并且可能会在此过程中覆盖i
,然后变为大于或等于10.
您需要将缓冲区(如char answer[100];
或动态分配malloc
)传递给scarf
。 Using scanf
to scan a string correctly is a bit tricky.
如果您真的只想读一个字符,@ klyone的答案是正确的:使用%c
格式字符串。
答案 2 :(得分:0)
一个问题是您使用scanf输入字符串,但答案是单个字符。
即使您只输入单个字符串,它也会尝试将该字符放入字符串中,后跟空字节。
假设有一个charcater答案,将'char answer'更改为'char answer [2];'并将scanf()更改为scanf(“%1s”,回答);可能有帮助
答案 3 :(得分:0)
假设您想要读取字符串而不是单个字符,我强烈建议您使用fgets
而不是scanf
来读取您的输入,因为它将确保您永远不会获得缓冲区据我所知,任何形式的溢出。
此外,正如其他人所说,您首先需要为答案分配多个字符,方法是静态分配或使用malloc
和free
动态分配。假设您想要在某处保存答案,则需要进行动态分配。如果您只需要一次,那么静态分配它就像char answer[100];
就足够了。虽然我建议在文件顶部放置#define BUFFER 100
之类的内容,然后将其分配为char answer[BUFFER];
。