-4
我正在用C編寫一個小程序來讀取文件並將其包含在鏈接列表中。我能夠用第一個元素創建列表,但每次添加元素時,都會覆蓋之前添加的元素。將節點添加到C中的列表的末尾
這裏是我到目前爲止的代碼:
<pre>
struct test_struct
{
char* valeur;
char** tableau;
struct test_struct *next;
};
FILE* ouvrirFichier(char* fichier);
struct test_struct* create_list(char* ligne);
struct test_struct* add_to_list(char* ligne);
void print_list();
struct test_struct *head = NULL;
struct test_struct *curr = NULL;
//struct test_struct *ptr = NULL;
int main(int argc, char** argv)
{
//int i = 0, ret = 0;
struct test_struct *ptr = NULL;
FILE* fichier = NULL;
char ligne[121] = {0};
fichier = ouvrirFichier(argv[1]);
while(fgets(ligne, 121, fichier))
{
ptr = add_to_list(ligne);
printf("%sn", courant->valeur);
printf("%sn", ptr -> valeur);
}
print_list();
return 0;
}
struct test_struct* create_list(char* ligne)
{
//printf("n creating list with headnode as [%d]n",val);
struct test_struct *ptr = (struct test_struct*)malloc(sizeof(struct test_struct));
char* info[121] = {0};
char separateurs[] = "[]";
int j = 0;
int k = 0;
char* element;
if(NULL == ptr)
{
printf("n Node creation failed n");
return NULL;
}
for (element = strtok(ligne, separateurs); element; element = strtok(NULL, separateurs))
{
if (strcmp(element, " ") != 0 && strcmp(element, "n") != 0)
{
info[j] = element;
//printf("%sn", info[j]);
//info[j] = element;
j++;
}
}
k = j;
ptr-> valeur = info[0];
ptr -> tableau = malloc(k);
printf("%s234n", ptr -> valeur);
for (j = 1; j < k; j++)
{
ptr -> tableau[j - 1] = malloc(strlen(info[j]));
ptr -> tableau[j - 1] = info[j];
//printf("%s ", tete -> tableau[j - 1]);
}
ptr->next = NULL;
head = curr = ptr;
return ptr;
}
FILE* ouvrirFichier(char* entree)
{
FILE* fichier = NULL;
fichier = fopen(entree, "r");
if (fichier == NULL) // Le fichier n'a pu être ouvert
{
perror("Erreur d'ouverture du fichier d'entrée ");
exit(1);
}
return fichier;
}
struct test_struct* add_to_list(char* ligne)
{
int j = 0;
int k = 0;
//char ligne[121] = {0};
char* info[121] = {0};
char* element;
char separateurs[] = "[]";
if(NULL == head)
{
return (create_list(ligne));
}
//if(add_to_end)
//printf("n Adding node to end of list with value [%d]n",val);
//else
//printf("n Adding node to beginning of list with value [%d]n",val);
struct test_struct *ptr = (struct test_struct*)malloc(sizeof(struct test_struct));
if(NULL == ptr)
{
printf("n Node creation failed n");
return NULL;
}
for (element = strtok(ligne, separateurs); element; element = strtok(NULL, separateurs))
{
if (strcmp(element, " ") != 0 && strcmp(element, "n") != 0)
{
info[j] = element;
//printf("%sn", info[j]);
info[j] = element;
j++;
}
}
k = j;
ptr-> valeur = info[0];
ptr -> tableau = malloc(k);
printf("%s123n", ptr -> valeur);
for (j = 1; j < k; j++)
{
ptr -> tableau[j - 1] = malloc(strlen(info[j]));
ptr -> tableau[j - 1] = info[j];
}
ptr->next = NULL;
return ptr;
}</pre>
在文件看起來像這樣的內容:AB [C] [d]。
感謝
如果您需要任何幫助,請格式化您的代碼。 –
請至少使用正確格式和英文名稱。 –