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



我写了一段代码,将文件中的内容保存到链表中。然而,我想提取年龄并将其保存到一个int数组中。例如,Martha将被存储到名称中,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 ("%sn", 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

有什么建议吗?提前谢谢。

value不需要数组,只需要int。另外,我会对typedef使用大写的N,并相应地更改变量声明(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 */
}

相关内容

  • 没有找到相关文章

最新更新