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 :
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, ...
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 erreurprintf("erreur d'ouverture\n");} else {while(!feof(fic1)){ //jusqu'à fin fichierfgets(copie,N,fic1); //copie de la ligneprintf("%s",copie);j=0; //initialisation débutk=0;while (!isspace(copie[j])){ //recherche finj++;}m=0; //compteurfor(l=k;l<j;l++){ //parcours numérotemp[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 nomj++;} m=0; //compteur for(l=k;l<j;l++){ //parcours nomlistepays[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éej++; 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);
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.
Partager