Salve a tutti!
Sto battagliando con una porzione di programma che non riesco a sconfiggere.
In pratica, devo costruire una lista nella quale devo inserire dei dati. Devo, poi, cercare i dati min/max su tale lista per poi salvarli in variabili globali. Il problema è che il codice che ho pensato non funziona e non capisco minimamente il perché. Gli errori sono, nello specifico:
1 - Nella funzione di scorrimento della lista, quando cerco di fare il confronto con node->data e biggestNode->data;
2 - nel file che apro col puntatore info, che non stampa nulla anche quando modifico lo scorrimento della lista.
Ecco il programma:
Dichiarazione dell'elemento della lista
Funzione di scorrimento della listacodice:///Dichiaro e definisco il tipo Node typedef struct Node Node; struct Node{ int data; Node *prev; Node *next; };
Costruzione della listacodice:///Definizione di funzione di cerca del nodo col dato più grande void findBiggestNode(Node* node, FILE *infoFile){ ///Alloco memoria per la variabile globale biggestNode = malloc(sizeof(Node)); ///Assegno il minimo al nodo più grande biggestNode->data = 0; ///Ciclo che scorre la lista. Se l'elemento della lista considerato ha un valore più alto di biggestNode, allora memorizzo ///l'indirizzo dell'elemento della lista in biggestNode while(node != NULL){ if(node->data > biggestNode->data){ biggestNode = node; fprintf(infoFile, "Trovato nuovo valore massimo = %d\n\n", node->data); } ///Aggiorno la lista node = node->next; } }
main() e dichiarazione della variabile globalecodice:///Funzione di costruzione della lista Node *addNode(Node *oldNode){ ///Dichiaro l'elemento della lista da collegare Node *newNode; ///Dò memoria al puntatore appena dichiarato newNode = malloc(sizeof(Node)); ///Assegno un numero casuale al campo data newNode->data = rand() % 10; ///Collego l'ultimo elemento in modo che sia inserito in testa alla lista oldNode->prev = newNode; newNode->next = oldNode; newNode->prev = NULL; ///Valore di ritorno della funzione return newNode; }
Mi aiutate a capire dove sbaglio?codice:#include <stdio.h> #include <stdlib.h> #include <time.h> ///Dichiaro una variabile globale che conterrà il nodo col dato più grande Node *biggestNode; int main() { int i; Node *node; FILE *info; ///Dò memoria al puntatore appena dichiarato node = malloc(sizeof(Node)); if(node == NULL){ printf("Error in memory allocation"); exit(EXIT_FAILURE); } ///Costruisco la lista, composta da dieci elementi for(i = 0; i < 10; i++){ node = addNode(node); printf("%d\n", node->data); } info = fopen("c:/users/thisPC/desktop/nodeinfo.txt", "w"); if (info == NULL){ printf("Error while opening file."); exit(EXIT_FAILURE); } ///Chiamo la funzione findBiggestNode, che aggiorna la variabile globale biggestNode findBiggestNode(node, info); fclose(info); return 0; }

Rispondi quotando
Hai qualche idea?


