У меня есть простое задание, которое профессор хочет, чтобы мы выполнили.
В основном, чтобы извлечь некоторые цифры из текстового файла и загрузить в связанный список.
Я не хочу вдаваться в подробности, но у меня есть основной вопрос.
Он дал нам такую функцию:
INTLIST* init_intlist( int n )
{
INTLIST *lst;
lst = (INTLIST *)malloc(sizeof(INTLIST));
lst->datum = n;
lst->next = NULL;
return lst;
}
Эта функция используется для инициализации связанного списка с первым элементом. Затем он попросил нас определить функцию с такой подписью:
int insert_intlist( INTLIST *lst, int n )
Итак, я предполагаю, что он просто хочет, чтобы мы добавили в связанный список, поэтому я попробовал это:
int insert_intlist( INTLIST *lst, int n )
{
INTLIST* lstTemp;
lstTemp = (INTLIST *)malloc(sizeof(INTLIST));
lstTemp->datum = n;
lstTemp->next = lst;
lst = lstTemp;
free(lstTemp);
}
Итак, мой мыслительный процесс заключался в том, что он создает временный узел, назначает значение данных (Datum) и назначает следующий указатель, указывающий, куда указывает текущий указатель. Затем я переназначаю основной указатель на этот вновь созданный временный узел.
Таким образом, у нас есть, например, 2 узла:
[New Temp Node] -> [Предыдущий инициализированный узел]
Когда я шагаю по коду, он выглядит великолепно ...
Затем вернемся к основному. У меня есть только функция для печати списка:
while (lst!=NULL)
{
printf("The value is:%d", lst->datum);
lst=lst->next;
}
Проблема в том, что, кажется, печатается только одна цифра (а именно первая цифра, которую я читаю из файла, которая, я думаю, является последней в списке или, по крайней мере, я думал, что она была последней в списке). ).
Но это должно продолжаться, так как у меня есть 10 цифр в файле. Я знаю, что код очень грязный, и я его почистю ... вот моя основная функция, если кому-то нужна дополнительная информация:
#include <stdio.h>
#include <stdlib.h>
#include "intlist.h"
int main(int argc, char *argv[])
{
char c; /* Character read from the file. */
FILE* ptr; /* Pointer to the file. FILE is a
structure defined in <stdio.h> */
int index=0;
//INTLIST* aList[10]; //will use later
/* Open the file - no error checking done */
ptr = fopen("1.txt","r");
/* Read one character at a time, checking
for the End of File. EOF is defined
in <stdio.h> as -1 */
if(ptr==NULL) {
printf("Error: can't open file.\n");
/* fclose(file); DON'T PASS A NULL POINTER TO fclose !! */
return 1;
}
//aList[index] = malloc(sizeof(INTLIST)); WE NEED THIS LATER ON....
INTLIST *lst=NULL;
while ((c = fgetc(ptr)) != EOF)
{
if (c != ' ')
{
//make sure it isnt a space
int i = c - '0'; //get the value from the text file
if(c=='\n')
{
// aList[index]=lst;
// index++;
// aList[index] = malloc(sizeof(INTLIST));
while (lst!=NULL)
{
printf("The value is:%d", lst->datum);
lst=lst->next;
}
free(lst);
free(aList[index]);
return 0;
//new line in the file
//create another linked list
}
if (lst==NULL)
lst = init_intlist(i);
else
insert_intlist( lst, i);
}
}
fclose(ptr);
system("PAUSE");
return 0;
}
Вот intlist.h для тех, кому это может понадобиться:
#ifndef __intlist_h__
#define __intlist_h__
/* each entry in the list contains an int */
typedef struct intlist {
int datum;
struct intlist *next;
} INTLIST;
INTLIST *init_intlist( int n ); /* initializes the intlist with initial datum n */
int insert_intlist( INTLIST *lst, int n ); /* Inserts an int (n) into an intlist from the beginning*/
void list_append(INTLIST *list, void *datum); /* Inserts entry to the end of the list */
INTLIST* list_front(INTLIST *list); /*return the element at the front of the list, and remove it
from the list*/
void list_map( INTLIST *list, void (*f)(void *) ); /*Applies a function to each element of the list */
void list_delete( INTLIST *list ); /* Deletes (and frees) all entries in the list */
#endif