从字符串中提取整数并将其保存到链接列表中

时间:2018-12-18 11:47:08

标签: c string struct linked-list integer

我写了一个代码,将文件中的内容保存到链接列表中。 但是我想提取年龄并将其保存到一个int数组中。 例如,玛莎将被存储到名称中,而12将被存储到年龄中。

我一直在考虑实现它的方法,但是我无法提出适当的解决方案。

下面的代码将martha 12存储到一个char数组中。

#include <stdio.h>
#include <stdlib.h> 
#include <stdio.h>
#include <stdlib.h> 
#include <string.h>
#define MAXN 50    
#define val 2
typedef struct node {
    char name[MAXN];
    //int value[val];
    struct node *next;
}
node;

int main (int argc, char **argv) {

    FILE *file = argc > 1 ? fopen (argv[1], "r") : stdin;
    if (file == NULL)
        return 1;

    char buf[MAXN];
   // int buf2[val];

    node *first = NULL, *last = NULL;   


    while (fgets (buf, MAXN, file)) {

        node *head = malloc (sizeof(node));
        if (head == NULL) {         
            perror ("malloc-node"); 
            return 1;   
        }


        buf[strcspn(buf, "\n")] = 0;    


        strcpy (head->name, buf);
        head->next = NULL;


        if (!last)
            first = last = head;
        else {
            last->next = head;
            last = head;
        }


    }

    if (file != stdin)  
        fclose(file);

    node *ptr = first;              
    while (ptr != NULL) {           
        node *node_t = ptr;         
        printf ("%s\n", ptr->name); 
        ptr = ptr->next;            
        free (node_t);              
    }

    return 0;
}

这是输入文件:

Martha 12
Bill 33
Max 78
Jonathan 12
Luke 10
Billy 16
Robert 21
Susan 25
Nathan 20
Sarah 22

有什么建议吗? 预先谢谢你。

1 个答案:

答案 0 :(得分:1)

value不需要数组,只需要int。同样,我将对N使用大写typedef并相应地更改变量声明(Node *head;

typedef struct node {
    char name[MAXN];
    int value;
    struct node *next;
} Node;

您应该复制strcpy来解析字符串,并将值分配给sscanf,而不是复制刚用struct读取的行。请注意,我们在引用&之前放置了head->value运算符,因为我们需要指向value的指针:

sscanf(buf, "%s %d", head->name, &head->value);

对于错误处理,您还可以检查返回值的数量:

if(sscanf(buf, "%s %d", head->name, &head->value) != 2) {
    /* Do some error handling */
}