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个字符,它肯定会跳过。