https://i.imgur.com/FLxF9sP.png
如上面的链接所示,我必须输入“<”两次而不是一次,这是为什么?另外,似乎第一个输入被忽略,但第二个“<”是程序识别的输入。
即使没有循环也会发生同样的事情。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(){
int randomGen, upper, lower, end, newRandomGen;
char answer;
upper = 100;
lower = 1;
end = 1;
do {
srand(time(0));
randomGen = rand()%(upper + lower);
printf("%d\n", randomGen);
scanf("%s\n", &answer);
}while(answer != '=');
}
最佳答案
scanf
格式字符串中的空格,例如 "%c\n"
中的 \n
,会尝试匹配任意数量的空格,并且 scanf
不知道没有空白可以跳过,直到遇到非空白的内容(例如您键入的第二个字符)或输入末尾。您为其提供 =\n
,它会填充 %c
并等待直到空白结束。然后为它提供另一个 =
和 scanf
返回。第二次,角色可以是任何东西,但仍然有效。
跳过前导空格(并为一个字符使用正确的说明符,%c
,如前所述):
scanf(" %c", &answer);
此外,确保您确实成功读取某些内容也是一个很好的做法,特别是当未能读取某些内容意味着将其保留为未初始化并稍后尝试读取时(未定义行为的另一个示例)。因此,请检查 scanf
的返回值,该值应与您提供的转换说明符的数量相匹配:
if (scanf(" %c", &answer) != 1) {
return EXIT_FAILURE;
}
关于c - 为什么这会创建两个输入而不是一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58295706/