C - for循环仅在scanf之后执行

时间:2016-05-09 15:34:47

标签: c for-loop scanf

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);  
}  

4 个答案:

答案 0 :(得分:2)

answer 变量被定义为字符,因此您应该更改scanf函数的格式字符串:

scanf("%c",&answer);

答案 1 :(得分:1)

问题可能是因为你的缓冲区溢出。

您定义的变量answer只能存储一个char。然而,您将其传递给scanf以扫描字符串。如果您只输入一个字符并按Enter键,则表示您已经溢出answer,并且可能会在此过程中覆盖i,然后变为大于或等于10.

您需要将缓冲区(如char answer[100];或动态分配malloc)传递给scarfUsing 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来读取您的输入,因为它将确保您永远不会获得缓冲区据我所知,任何形式的溢出。

此外,正如其他人所说,您首先需要为答案分配多个字符,方法是静态分配或使用mallocfree动态分配。假设您想要在某处保存答案,则需要进行动态分配。如果您只需要一次,那么静态分配它就像char answer[100];就足够了。虽然我建议在文件顶部放置#define BUFFER 100之类的内容,然后将其分配为char answer[BUFFER];