Я только недавно начал изучать указатели и связанные списки в C, и есть некоторые вещи, которые я еще не понимаю.Я пытаюсь вырезать входную строку и назначить определенные части этой строки структуре и добавить эту структуру в начало связанного списка, и, наконец, распечатать его.Входные данные представляют собой строку в формате 'a word1 word2 word3
или 'l word1 word2 word3'
.Моя проблема в том, что список печатается не так, как предполагалось, и я думаю, что это связано с тем, как я добавляю элементы в список.Я хочу, чтобы он напечатал 3 слова, и он просто печатает последние два слова в последней строке ввода.Спасибо!
Вот мой код:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXINPUT 682
typedef struct words{
char * str1;
char * str2;
char * str3;
} words;
typedef struct node{
words data;
struct node * next;
} node;
typedef node * link;
link head; /*head of list*/
/*adds node to list*/
void add(char c[]){
words x;
char * str;
link temp = (link)malloc(sizeof(node));
strtok(c, " ");
str = strtok(NULL," ");
x.str1 = str;
str = strtok(NULL," ");
x.str2 = str;
str = strtok(NULL,"\0");
x.str3 = str;
temp->data = x;
temp->next = head;
head = temp;
}
void print_list(){
link temp;
for (temp = head;temp;temp = temp->next){
printf("%s %s %s\n", temp->cont.nome,temp->cont.email,temp->cont.numero);
}
}
int main(){
char input[MAXINPUT];
head = NULL;
while (input[0] != 'x'){
fgets(input,682,stdin);
input[strcspn(input,"\r\n")] = 0;
if (input[0] == 'a')
add(input);
if (input[0] == 'l')
print_list();
...