gpt4 book ai didi

c - 为什么这会创建两个输入而不是一个

转载 作者:行者123 更新时间:2023-11-30 18:10:24 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com