将fgets()与链接列表一起使用?

时间:2017-05-22 01:39:24

标签: c data-structures linked-list

我正在建立一个地址簿来存储个人姓名,地址和电话号码。我在追加功能方面遇到了麻烦。

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(),而是跳转到该地址,然后要求用户输入电话号码。

3 个答案:

答案 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()