我正在建立一个地址簿来存储个人姓名,地址和电话号码。我在追加功能方面遇到了麻烦。
struct node{
char name[21];
char address[101];
char phone[15];
struct node *next;
};
void append(){
if(root == NULL){ // Empty list
struct node *temp = (struct node*) malloc(sizeof(struct node));
printf("Enter Name: ");
fgets(temp->name,20,stdin);
printf("Enter Address: ");
fgets(temp->address,100,stdin);
printf("Enter Phone Number: ");
scanf("%s",&temp->phone);
}
}
对于名称和地址我,除了用户输入带有空格的字符串,所以我决定使用fgets()。但是,我不确定如何存储用户输入节点的名称或地址。当我运行我的程序时,没有为名称调用fgets(),而是跳转到该地址,然后要求用户输入电话号码。
答案 0 :(得分:0)
我认为你应该使用scanf而不是fgets。
与fgets
从流中读取字符并将它们作为C字符串存储到str中,直到读取(num-1)个字符或者到达换行符或文件结尾,以先发生者为准。
答案 1 :(得分:0)
可能出现的问题之一是你有一个松散的'\ n'(换行符)字符,因为你可能已经知道fgets在到达EOF或换行符时就会停止。为了捕获任何松散的换行符,请添加:
while(getchar() != '\n');
之前的陈述应该在第一个fgets声明之前出现。这为任何用户输入释放了stdin。
答案 2 :(得分:0)
你应该保持一致,我建议在这里使用 scanf ,即使 fgets 是一个更好的选择,同时从输入流中读取。
或者,如果您非常喜欢fgets(),请从最终处理换行条件。如果你想保持简单,但我们会建议:
@field:JsonProperty
如果你只是看一下这里的讨论,你也会受益匪浅: gets() vs scanf() vs fgets()