将stdin的整数输入插入到链表中

时间:2015-03-20 12:54:27

标签: c linked-list stdin

我试图编写一个程序,从stdin读取输入,然后将其插入到链表中。

输入将采用以下形式,并且可能非常长:

3,5;6,7;8,9;11,4;

我想要做的是将由;分隔的两个整数值插入到结构中,然后继续将该结构放入链表数据结构中。

我获取输入的方式是使用以下内容:

while (sscanf(remainder, "%d,%d;%s", first, second, remainder) != null)

(归功于回答我以前的一个问题的用户)^ 但我不确定如何实际使用"首先"和"第二"我得到的值并将其插入到链表中。

编辑:

我考虑了以下关于使用strtol的评论,为了测试目的,我尝试了这段代码:

char str[50] = "3,5;6,7;8,9;11,4;";
char *ptr;
int ret;

ret = strtol(str, &ptr, 10);
printf("The number is %d\n", ret);

但是,我不知道如何移动到字符串中的下一个整数。理想情况下,我希望能够在;之间同时获得两个整数而不是一个整数。我该怎么做?

1 个答案:

答案 0 :(得分:1)

我只是回答,以便您可以关联组件。 只需以这种方式获取输入(如您所知格式)

int first,second;
scanf("%d,%d;",&first,&second);

或者如前所述使用sscanf(),如果事先已经提供了字符串。

获得第一个和第二个数字后。把它们放在一个结构中。

 struct two_num 
{
    int a;
    int b;
} ;

在链接列表中

struct node
{
    struct node *next;
    struct two_num my_num;
};

struct node* head;

现在,对于每对数字,您将向head添加一个节点,并复制该节点的my_num结构中的两个数字,如下所示 -

 add_node(struct node *head,int x,int y)
 {
     struct node *temp;
     temp=(struct node *)malloc(sizeof(struct node));
     if(head==NULL)
     //error
    else
    {
        temp->my_num.first=x;
        temp->my_num.second=y;
        struct node *p=head;
        while(p!=NULL && p->next!=NULL)
          p=p->next;
        if(p==NULL)
        {
            head=p;
            head->next=NULL;
            return;
        }
        p->next=temp;
        p->next->next=NULL;
}