2017-06-21 2 views
0

J'essaye d'insérer dans une liste simplement liée d'un dossier. Avez-vous les gars les gars ont une idée pourquoi la fonction n'insère pas la dernière ligne dans mon fichier ?insérer dans la liste simple liée ne reçoit pas la dernière ligne

Ceci est le fichier:

  • 10, Ghidul Ciberbobocului, Stan Daria, 3, Popescu Matei, Ionescu Gigel, Ilinca Radu, 100,5
  • 2, printemps, Mirodene Cristina, 4, Dumitru Mihai, Vasili Valentin, Balasa Silvia, Dumitru Ion, 400.
  • 89, Serile Teatrului Studentesc, Petre Ion, 2, Nicolae Ramona, Stan Alberto, 1000
  • 1, tutorat, Petre Miruna, 2, Bode Cristina, Angelescu Paul, 500,5
  • 11, IT Fest, Ciurea Ion , 2, Ionescu Georgiana, Bianca Neagu, 100,6

Mon code:

struct Proiect { 
    int id; 
    char* numeProiect; 
    char* numeCoordonator; 
    unsigned int nrStudenti; 
    char** studenti; 
    float costInscriere; 
}; 

struct nodLista { 
    Proiect proiect; 
    nodLista *next; 
}; 

nodLista* inserareNod(nodLista *first, Proiect p) { 
    nodLista* newNode = new nodLista; 
    newNode->next = NULL; 
    newNode->proiect = p; 

    if (!first) { 
     return newNode; 
    } 

    nodLista* aux = first; 
    while (aux->next) { 
     aux = aux->next; 
    } 

    aux->next = newNode; 
    printf("%d\n", aux->proiect.id); 
    return first; 
} 

void main() { 
    nodLista* first = NULL; 
    Proiect proiect; 


    FILE *f = fopen("proiecte2.txt", "r"); 
    char line[150]; 
    int nrProiecte = 0; 
    if (f) { 
     while (fgets(line, sizeof(line), f)) { 
      nrProiecte++; 
     } 
     printf("Nr proiecte: %d",nrProiecte); 
     fclose(f); 
    } 
    else { 
     printf("Fisierul nu a fost gasit"); 
    } 

    f = fopen("proiecte2.txt", "r"); 
    char *token[150], sep_list[] = ","; 
    Proiect* listaProiecte; 
    listaProiecte = (Proiect*)malloc(nrProiecte * sizeof(Proiect)); 
    int i = 0; 

    if (f) { 
     while(fgets(line, sizeof(line), f)) { 
      token[0] = strtok(line, sep_list); 
      listaProiecte[i].id = atoi(token[0]); 


      first = inserareNod(first, listaProiecte[i]); 
      i++; 
     } 

    } 
    else printf("Fisierul nu aputut fi deschis"); 

} 

sortie: Il affiche seulement 10, 2, 89 et 1.

Répondre

0

Avez-vous effectué des impressions à l'intérieur de cette fonction pour vérifier si le temps est correct?

while(fgets(line, sizeof(line), f)) { 
      token[0] = strtok(line, sep_list); 
      listaProiecte[i].id = atoi(token[0]); 


      first = inserareNod(first, listaProiecte[i]); 
      i++; 
     } 
+0

Je viens de faire des tirages à l'intérieur de cette fonction et il lit toutes les lignes. – Maria

+0

Ok, je pense que c'est vrai. Je viens de faire cela en papier et ça marche bien sauf le printf lui-même. Vous imprimez toujours le "aux". Lorsque vous mettez le dernier élément, vous imprimez l'élément derrière ' Exemple: insertion: ** 89 ** Courant aux aux après: ** aux = 2 ** Élément à insérer: ** aux -> suivant = 89 ** Etat de la liste: ** 10 -> 2 -> 89 -> null ** printf (... aux) // ** sortie: 2 ** ' Donc je pense que vous n'atteindrez jamais la dernière élément lors de l'impression mais les éléments sont bien insérés. Faire une autre fonction à imprimer –

+0

Vous avez raison. Je vous remercie !! – Maria