gpt4 book ai didi

c - 普通 C - 函数忽略第二个 fgets

转载 作者:行者123 更新时间:2023-11-30 16:32:23 25 4
gpt4 key购买 nike

我尝试制作一个输入动物的类型、名称和年龄的函数。对于第一个动物,它工作得很好,但对于第二个动物,它会跳过该类型。有什么想法吗?

inputAnimalDetails(&ani1);
inputAnimalDetails(&ani2);

void inputAnimalDetails(animal* animal)
{
char type[LEN] = { 0 };
char name[LEN] = { 0 };
int age = 0;
printf("Enter animal type: ");
fgets(type, LEN, stdin);
type[strcspn(type, "\r\n")] = 0;
strcpy(animal->type, type);
printf("Enter animal name: ");
fgets(name, LEN, stdin);
name[strcspn(name, "\r\n")] = 0;
strcpy(animal->name, name);
printf("Enter animal age: ");
scanf("%d", &age);
animal->age = age;
}

最佳答案

scanf 语句读取整数值,但在缓冲区中留下新行'\n' 字符。因此,在第二轮中,第一个 fgets 语句将从缓冲区中获取这一新行并将其解释为“空”行,即“跳过”类型。

要克服这个问题,可以从缓冲区中获取换行符(例如 fgetch),或者 - 更好 - 使用 fgets 而不是 scanf 并将输入转换为整数值那么。

例如:

char ageStr[LEN] = { 0 };
if (fgets(ageStr, LEN, stdin)) {
animal->age = strtol(age,NULL,10);
}

关于c - 普通 C - 函数忽略第二个 fgets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50183123/

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