Le programme que je réalise utilise la redirection io pour lire un fichier ligne par ligne, chaque ligne étant un enregistrement dans une liste. J'ai besoin d'imprimer une liste de structure, mais je suis incapable de le faire à moins que ce soit à l'intérieur d'une boucle. Il a précédemment travaillé en utilisant une boucle for avec (i = 0, i (lessthan) list.nused; i ++) mais quand je le fais, rien ne s'imprime et il n'y a pas d'erreur. Toute aide serait géniale, merci. Voici une partie du code:C - Impossible d'imprimer la structure en dehors de la boucle while
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define NAMESIZE 20
#define BLOCK 2
#define BUFSIZE 512
typedef struct {
char last[NAMESIZE];
char first[NAMESIZE];
} name;
typedef struct {
name name;
int score;
} record;
typedef struct {
record **data;
size_t nalloc;
size_t nused;
} record_list;
void list_init(record_list *list) {
list->data = NULL;
list->nalloc = list->nused = 0;
}
int make_list (record_list *list) {
int score;
size_t i;
char line[BUFSIZE];
char fname[NAMESIZE];
char lname[NAMESIZE];
while (fgets(line, BUFSIZE, stdin) != NULL) {
if (list->nalloc == list->nused) {
record *rec = realloc(list->data, (list->nalloc+BLOCK)*sizeof(record));
if (rec == 0) {
fprintf(stderr, "Unable to resize.");
clearerr(stderr);
return 1;
}
list->data = &rec;
list->nalloc += BLOCK;
}
if (fgets(line, BUFSIZE, stdin) == NULL) {
clearerr(stdin);
return 1;
}
sscanf(line, "%s %s %d", fname, lname, &score);
strcpy(list->data[list->nused]->name.first, fname);
strcpy(list->data[list->nused]->name.last, lname);
list->data[list->nused]->score = score;
list->nused = list->nused++;
//here is where it is able to print
//printf("%s\n", list->data[list->nused]->name.last);
}
//I would like it to print everything here
for (i = 0; i < list->nused; i++) {
printf("%s, %s: %d\n", list->data[i]->name.last,
list->data[i]->name.first, list->data[i]->score);
}
return 1;
}
int main(int argc, char *argv[]) {
record_list list;
list_init(&list);
make_list(&list);
}
Voulez-vous que votre code soit compilé? 'list.nused' est invalide car' list' est un pointeur. Il doit donc être 'list-> nused'. De même pour certains autres accès aux champs 'list'. Donc, clairement, vous n'avez pas compilé votre code ou ce n'est pas la bonne version du code. – kaylum
@kaylum désolé, devrait compiler maintenant – Bobbis
"Devrait" compiler ?? Avez-vous réellement essayé? C'est toujours faux et ne compilera pas. On dirait que vous ne prenez même pas la peine de compiler et d'exécuter votre code. Alors, comment pouvons-nous faire confiance au comportement supposé que vous avez décrit? – kaylum