Чтение значений из текстового файла в связанный список (без массива структур) для использования в стеке;совет? - PullRequest
0 голосов
/ 12 октября 2019

У меня есть вопрос. Я пытаюсь прочитать целочисленные значения из файла в связанный список, который затем будет использоваться для функций push и pop. Я выполнил свои функции push и pop, но я пытаюсь понять, правильно ли я прочитал. Пока с моим кодом я использовал fscanf, чтобы прочитать файл и распечатать его, и он печатает все значения. Когда я выполняю функцию push, это неправильно распечатывает. Любые советы о том, что я могу делать неправильно.

4
2
1
6
1
5
2
3
3
1
6
1
\\values to be read from file

код ниже:

//linked list with place to store values and nodes
struct stack_list {
    int list_values;
    struct stack_list *node;
};

struct stack_list *head_node = NULL; //empty list

void stack_print(struct stack_list *);  //prototype to print list
struct stack_list * push(struct stack_list * n, struct stack_list * c); //prototype to push values

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

    FILE * fp;  //opening file
    fp = fopen("filename", "r");  //gives name of file to open
    struct stack_list * mock = (struct stack_list *)malloc(sizeof(struct stack_list));
    //int values[12];  //array to be used to collect values to pass to my list
    //int n, t;

    if (fp == NULL){

        printf("File not provided.");
    }
    else if (fp != NULL) {

        printf("Printing values first: \n");

        while (fscanf(fp,"%d", &mock->list_values) == 1) {
            mock->node = head_node;
            printf("%d\n", mock->list_values);
        }
    }
    push(mock, constructor_stack(mock));
    stack_print(mock);
}

struct stack_list * constructor_stack(int j){
    struct stack_list * my_node = (struct stack_list *)malloc(sizeof(struct stack_list));
    my_node->list_values = j;
    my_node->node = NULL;
    return my_node;
}

struct stack_list * push(struct stack_list * num_list, struct stack_list * check_nodes) {

    printf("Added values to stack:\n");
    printf("Push: %d\n", check_nodes->list_values);
    check_nodes->list_values = num_list;
    return check_nodes;
}

Это часть того, что я имею до сих пор. Я пытался использовать массив, чтобы просто сохранить значения и передать в мой список, но это тоже не сработало.

int values[12];  //array to be used to collect values to pass to my list
int n, t;

while (fscanf(fp,"%d", &values[n]) == 1) {
            n++;
        }
    }
    for (t = 0; t < 12; ++t) { //iterating over array where values are stored
        head_node = values[t]; //inputting values into the empty list
        printf("%d\n", head_node); //printing values passed to empty list for reference
    }

Это вывод, который я получаю.

Printing values first:
4
2
1
6
1
5
2
3
3
1
6
1
Added values to stack:
Push: 136352
Printing stack:
1111111111111111111111

Это напечатало значения, но не работало и в моей функции push. Я ценю любой совет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...