Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C-for循环仅在scanf之后执行_C_For Loop_Scanf - Fatal编程技术网

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

C-for循环仅在scanf之后执行,c,for-loop,scanf,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: ");

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);  
}  
for(inti=0;i<10;i++){
答案;
gotoxy(32,10);//自制函数(使用Dev C++)转到坐标
star_元音(easy[i]);
gotoxy(30,18);
printf(“回答:”);
scanf(“%s”和“应答”);
}  

问题可能是由于缓冲区溢出

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

您需要将缓冲区(如
char-answer[100];
或动态分配的
malloc
)传递到
scarf


如果您真的只想读取一个字符,则@klyone的答案是正确的:使用
%c
格式字符串。

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

scanf("%c",&answer);

一个问题是您正在使用scanf输入字符串,但答案是单个字符

即使只输入单个字符串,它也会尝试将该字符放入字符串中,后跟一个空字节


假设答案为1字符,将“字符答案”更改为“字符答案[2];”将scanf()更改为scanf(“%1s”,答案);可能会有帮助

假设您希望读取字符串而不是单个字符,我强烈建议您使用而不是
scanf
来读取输入,因为据我回忆,这将确保您永远不会出现任何类型的缓冲区溢出


另外,正如其他人所说,您首先需要为答案分配多个字符,可以静态分配,也可以使用
malloc
free
动态分配。假设您想将答案保存在某个地方,则需要执行动态分配。如果只需要一次,则静态分配它,如
char-answer[100]就足够了。尽管我建议在文件顶部放置类似于
#define BUFFER 100
的内容,并像
char answer[BUFFER]那样分配它改为。

您提到scanf的格式说明符为%s。应该是%c。我现在感到很尴尬。这实际上修正了它,虽然我的for循环不是1。这有点像是在另一个之后跳过数组索引。@IvanRalphG.Vitto:关于“跳过”:您是否看到
答案:
打印多次,即使您只输入了一个数字@DarkDust由于gotoxy(),我没有看到它被多次打印,但是我尝试打印出当前数组的值,这就是为什么我知道我的for循环正在一个接一个地跳过。有什么解决办法吗?@IvanRalphG.Vitto:我真的不明白,对不起。使用类似于printf(“%d\n”,i)的东西
以真正检查
i
是否跳过值。或者更好:使用调试器:-)@DarkDust我已经试过了。根据我键入的任何内容的长度加上新行的1个字符,它肯定会跳过。