Tout d'abord bonsoir à tous et merci de l'attention que vous porterez à ce message. Je suis entrain de réaliser un projet en c qui traite diverses informations. Je récupère ces informations dans des fichiers texte, ligne par ligne avec un fgets. Elles sont ensuite distribuées entre plusieurs variables de la manière qui suit :

- j et k prenne la valeur 0 (début du tableau copie qui contient une ligne du fichier)
- j va ensuite se placer a la fin du premier élément avecun while(!isspace(copie[j])) pour l'encadrer
- avec un for(l=k,l<j,l++) le programme recopie dans la variable correspondante
- j avance au début de l'élément suivant, k prend sa valeur, j avance jusqu'à l'espace suivant et ainsi de suite

le premier élément de la ligne est souvent un nombre récupéré par i, qui sert d'indice dans un tableau, n,m et o sont utilisés pour parcourirs d'autres tableaux.

Le problème que je rencontre est localisé en rouge dans le code qui suit :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
FILE *fic1;
/*FILE *fic2;
FILE *fic3;
FILE *fic4;*/
char copie[N];
char temp[N];
nt i,j,k,l,m,n/*,o*/;

fic1 = fopen("pays.txt","r");  //ouverture fichier en ecriture
if ( fic1 == NULL ) {          //vérif erreur
printf("erreur d'ouverture\n");
} else {
while(!feof(fic1)){ //jusqu'à fin fichier
fgets(copie,N,fic1); //copie de la ligne
printf("%s",copie);
j=0; //initialisation début
k=0;
while (!isspace(copie[j])){ //recherche fin
j++;
}
m=0; //compteur
for(l=k;l<j;l++){ //parcours numéro
temp[m]=copie[l]; //copie numéro m++;
} temp[m]='\0'; i=atoi(temp); //printf("%d",i); j++; k=j; while (!isspace(copie[j])){ //recherche fin nom
j++;
} m=0; //compteur for(l=k;l<j;l++){ //parcours nom
listepays[i].nom[m]=copie[l]; //copie nom m++;
} //printf("%s",listepays[i].nom); j++; k=j; //récupération début mot while (!isspace(copie[j])){
j++;
} m=0; for(l=k;l<j;l++){
listepays[i].capi[m]=copie[l]; m++;
} //printf("%s",listepays[i].capi); j++; k=j; while (!isspace(copie[j])){
j++;
} m=0; for(l=k;l<j;l++){
listepays[i].cont[m]=copie[l]; m++;
} //printf("%s",listepays[i].cont); j++; k=j; while (!isspace(copie[j])){
j++;
} m=0; for(l=k;l<j;l++){
listepays[i].gouv[m]=copie[l]; m++;
} //printf("%s",listepays[i].gouv); j++; k=j; while (!isspace(copie[j])){
j++;
} m=0; for(l=k;l<j;l++){
temp[m]=copie[l]; m++;
} temp[m]='\0'; listepays[i].habi=atoi(temp); //printf("%d",listepays[i].habi); n=0; //initialisation compteur while(copie[j] != '\0'){ //jusqu'à fin ligne copiée
j++; k=j; while (!isspace(copie[j])){
//printf("%c",copie[j]); j++;
} m=0; for(l=k;l<j;l++){
listepays[i].rich[n][m]=copie[l]; m++;
} //printf("%s",listepays[i].rich[n]); n++;
}
}
} fclose(fic1);
Il y a différent printf en commentaires dans le programme, ils servent a tester si les différentes variables sont bien remplies. En arrivant a listepays.rich on est en bout de ligne dans le fichier, les différents éléments, en nombre indéterminé, sont bien tous copiés mais ensuite des tas de caractères bizars s'affichent a la suite. Avec le printf sur j dans la boucle while(!isspace(copie[j])) on obtient la même chose sans les espaces, suite a quoi, mélé aux caractères bizars, apparait un baratin sur windows, le processeur, ...

Je ne sais plus quoi faire. Le while(!isspace(copie[j])) avait été précédemment corrigé. Avant correction la boucle while(!feof(fic1)) se réalisait mais maintenant plus. Cela ajouté au problème précédent me met en déroute, on est trois a tester et rien y fait on arrive pas à résoudre le problème. Si quelqu'un identifie l'erreur, je lui en serait très reconnaissant.