C, de la lecture du fichier dans la structure
J'ai eu du mal avec cette pendant des jours et je ne peux pas comprendre pourquoi ça ne fonctionne pas.
Je suis en train de lire les numéros de fichier avec des nombres écrits comme ceci:
0 2012 1 1 2000.000000
0 2012 1 1 3000.000000
1 2012 1 1 4500.000000
ma structure:
struct element{
int id;
int sign;
int year;
int month;
double amount;
struct element *next;
};
struct queue{
struct element *head;
struct element *tail;
struct element *head2;
struct element *temp;
struct element *temph;
int size;
};
(head2, temp et temph sont utilisés dans le tri de la structure)
et de la lecture à partir d'un fichier:
void read_str(struct queue *queue){
FILE *reads;
char filename[40];
int temp;
printf("Type in name of the file\n");
scanf("%s",&filename);
reads=fopen(filename, "r");
if (reads==NULL) {
perror("Error");
return 1;
}
else {
while(!feof(reads)) {
struct element *n= (struct element*)malloc(sizeof(struct element));
fscanf(reads,"%d %d %d %d %lf", n->id, n->sign, n->year, n->month, n->amount);
n->next=NULL;
if(queue->head ==NULL) {
queue->head=n;
}
else {
queue->tail->next=n;
}
queue->tail=n;
queue->size++;
}
}
}
Je peut changer la façon dont les données de recherche dans un fichier en changeant la fonction qui écrit, mais je ne pense pas que ce soit le problème. Je suppose que je suis en utilisant malloc
dans un mauvais sens.
OriginalL'auteur ozech | 2012-07-01
Vous devez vous connecter pour publier un commentaire.
La
scanf
famille de fonctions attendre adresses. Modifier lafscanf
ligne:Note de côté, c'est une très trompeuse ligne:
else { while(!feof(reads)) {
?Réponse tardive, mais vous ne devriez pas utiliser la fonction feof (), car il ne renvoie false, une fois que vous avez essayé de lire au-delà de la fin du fichier. Il est possible de lire dans seulement une partie de la structure qui n'est probablement pas ce que vous voulez. Il est également possible que votre boucle exécute un temps supplémentaire. En revanche, vous pouvez vérifier que la valeur que fscanf retourne est
>= sizeof(your_struct)
. De cette façon, vous savez que vous avez lu dans l'ensemble d'une struct.OriginalL'auteur cnicutar