我试图编写一个程序,从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);
但是,我不知道如何移动到字符串中的下一个整数。理想情况下,我希望能够在;
之间同时获得两个整数而不是一个整数。我该怎么做?
答案 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;
}