我无法弄清楚我的代码有什么问题.这是我的代码:
#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;
}
Run Code Online (Sandbox Code Playgroud)
任务很简单,你必须建立一个数据库但狗和所有者可以有两个或更多的名字,所以这就是为什么我尝试使用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
Run Code Online (Sandbox Code Playgroud)
我读过这篇文章却没有帮助我.
我使用的输入:
Doggy 1
Big Dick
2
Doggy 2
Run Code Online (Sandbox Code Playgroud)
它在Doggy 2之后结束.
Sou*_*osh 11
你是从你的上一个留下一个新行,scanf()这是一个有效的输入fgets().更改
scanf("%d", &size);
Run Code Online (Sandbox Code Playgroud)
至
scanf("%d%*c", &size);
Run Code Online (Sandbox Code Playgroud)
以消费和丢弃由于记者尾随换行符ENTER进入狗的数量后关键.
dogAge在lop内也可以进行变量扫描.
相关的,引用C11标准,章节§7.21.6.2,fscanf()
除非与指令匹配,否则尾部空白区域(包括换行符)将保持未读状态.[...]
因此,newline('\n'),尾部白色空格在输入缓冲区中未被读取.