gpt4 book ai didi

c - 如何在结构中正确使用 fgets?

转载 作者:太空狗 更新时间:2023-10-29 17:17:11 24 4
gpt4 key购买 nike

我不知道我的代码有什么问题。这是我的代码:

#include <stdio.h>
#include <stdlib.h>

#define N 20

typedef struct _dog {
char dogName[N],ownerName[N];
int dogAge;
} Dog;

int main() {
//Dynamic array
int size;
printf("Number of dogs: ");
scanf("%d", &size);
Dog *dog = (Dog*)malloc(sizeof(Dog)*size);
printf("\n");
//Input
int i;
printf("Please provide the data: [dogName][ownerName][dogAge] :\n");
for(i=0;i<size;i++) {
fgets(dog[i].dogName, sizeof(dog[i].dogName), stdin);
fgets(dog[i].ownerName, sizeof(dog[i].ownerName), stdin);
scanf("%d", &dog[i].dogAge);
}
//Output
printf("\nYou provided the following data:\n");
for(i=0;i<size;i++) {
printf("Dog Name: %s\nOwner Name: %s\nDog Age: %d\n", dog[i].dogName, dog[i].ownerName, dog[i].dogAge);
}

free(dog);
return 0;
}

这个任务很简单,你必须建立一个数据库,但是狗和主人可以有两个或更多的名字,所以这就是我尝试使用 fget 的原因。但是输出看起来很糟糕:(第一个狗名部分通常是空白的)

You provided the following data:
Dog Name:

Owner Name: Doggy 1

Dog Age: 0
Dog Name: Big Dick

Owner Name: 2

Dog Age: 0

我读过 this但对我没有帮助。

我使用的输入:

Doggy 1
Big Dick
2
Doggy 2

在狗狗2之后就结束了。

最佳答案

您正在从上一个 scanf() 中留下换行符,这是 fgets()有效输入。变化

scanf("%d", &size);

scanf("%d%*c", &size);

由于在输入狗的数量后按下 ENTER 键,消耗并丢弃尾随的换行符。

dogAge 变量扫描也是如此,在 lop 内。

相关,引用C11标准,章节§7.21.6.2,fscanf()

Trailing white space (including new-line characters) is left unread unless matched by a directive. [...]

因此,换行符 ('\n'),尾随空格,在输入缓冲区中未被读取。

关于c - 如何在结构中正确使用 fgets?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34481277/

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