Fgets saute des lignes
Résolu
rabah200830
-
totof31 Messages postés 163 Date d'inscription Statut Membre Dernière intervention -
totof31 Messages postés 163 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Voila j'ai écrit le code suivant :
Au début la lecture se fait normalement (ligne par ligne) et juste après que l'instruction qui j'ai marqué dans le code (l'instruction qui provoque les sauts) est exécutée la fonction fgets sauts des lignes. Si par exemple après l'exécution de l'instruction c.nombre devient égale à 29 alors fgets saute 29 ligne à chaque lecture. Je ne sais pas d'où vient le problème. Quelqu'un pourrait m'aider?
Voila le code des fonction decoupe et enlever et commence_avec :
Le problème ne vient pas de ces fonctions car je bien vérifié en les mettant en commentaire et en affectant une valeur à c.nombre et j'ai le même résultat.
Le problème ne vient pas aussi de fait qu'il y a trois fgets puisque les deux dernières ne sont pas exécutées puisque la condition n'est jamais satisfait en sautant 29 lignes.
Merci pour vos réponses
Cordialement.
Voila j'ai écrit le code suivant :
instance lire (char *nom_fichier) { instance c; FILE * f = fopen(nom_fichier,"r"); bool distances = false; bool cord = false; int t=0; char ch[MAX]; if (f != NULL) { while(!feof(f)) { fgets(ch,MAX,f); printf("ch %s",ch); if(commence_avec(ch,"NAME:")){ enlever(ch,c.nom,5); } if(commence_avec(ch,"DIMENSION:")){ char ch2[MAX]; enlever(ch,ch2,10); c.nombre = atoi(ch2); //instruction qui provoque les sautes } if(!(strcmp("EDGE_WEIGHT_SECTION\n",ch))){ int i; printf("j'ai trouve\n"); for(i=0;i<c.nombre;++i){ fgets(ch,MAX,f); char tab[MAX][MAX]; int k; decoupe(ch,' ',tab,&k); int j; for(j=0;j<k;++j){ c.distances[i][j] = atof(tab[j]); //printf("%f ",c.distances[i][j]); } printf("\n"); } distances = true; } t++; if(strcmp("DISPLAY_DATA_SECTION",ch)){ int i; for(i=0;i<c.nombre;++i){ fgets(ch,MAX,f); char tab[MAX][MAX]; int k; decoupe(ch,' ',tab,&k); int j; for(j=0;j<3;++j){ c.cor[i][j] = atof(tab[j]); cord = true; } } } if(!distances && cord){ calcule_distances(c.cor,c.distances,c.nombre); } } fclose(f); } printf("t= %d\n",t); return c; }
Au début la lecture se fait normalement (ligne par ligne) et juste après que l'instruction qui j'ai marqué dans le code (l'instruction qui provoque les sauts) est exécutée la fonction fgets sauts des lignes. Si par exemple après l'exécution de l'instruction c.nombre devient égale à 29 alors fgets saute 29 ligne à chaque lecture. Je ne sais pas d'où vient le problème. Quelqu'un pourrait m'aider?
Voila le code des fonction decoupe et enlever et commence_avec :
void enlever (char *ch1,char ch2[], int debut){ int i=0; int j=0; char c; bool espace; do { c = ch1[debut+i]; if(c != ' ' && !espace){ ch2[j] = c; espace = false; j++; } i++; }while(c != '\0'); }
bool commence_avec(char * ch1,char *ch2){ int i=0; while(ch1[i] !='\0' && ch2[i] !='\0') { if(ch1[i] != ch2[i]) return false; i++; } return true; }
void decoupe (char *ch,char c,char tab[MAX][MAX],int *k){ bool espace = false; int j=0; *k =1; int i=0; while(ch[i] !='\0'){ char car = ch[i]; if(car == c){ if(c !=' ' || !espace){ tab[*k-1][j] = '\0'; j=0; *k = *k+1; } } else{ tab[*k-1][j] = car; espace = false; j++; } if(car == ' ') espace =true; i++; } }
Le problème ne vient pas de ces fonctions car je bien vérifié en les mettant en commentaire et en affectant une valeur à c.nombre et j'ai le même résultat.
Le problème ne vient pas aussi de fait qu'il y a trois fgets puisque les deux dernières ne sont pas exécutées puisque la condition n'est jamais satisfait en sautant 29 lignes.
Merci pour vos réponses
Cordialement.
A voir également:
- Fgets saute des lignes
- Partager des photos en ligne - Guide
- Excel trier par ordre alphabétique en gardant les lignes - Guide
- Écrire plusieurs lignes dans une cellule excel mac - Guide
- Jeu bonhomme qui court et saute - Télécharger - Arcade
- Problème bbox tv image qui saute - Forum Bbox Bouygues
3 réponses
Bonsoir rabah200830,
Travailles-tu sous Linux ?
Essaie en ajoutant "fgetc(stdin);" avant ton fgets"..";
Travailles-tu sous Linux ?
Essaie en ajoutant "fgetc(stdin);" avant ton fgets"..";
Bonjour,
Entre :
if(!(strcmp("EDGE_WEIGHT_SECTION\n",ch))){
et
if(strcmp("DISPLAY_DATA_SECTION",ch)){
es-tu certain qu'il n'y a pas un "!" en trop ou en moins ? Je pencherais bien pour la première solution...
Entre :
if(!(strcmp("EDGE_WEIGHT_SECTION\n",ch))){
et
if(strcmp("DISPLAY_DATA_SECTION",ch)){
es-tu certain qu'il n'y a pas un "!" en trop ou en moins ? Je pencherais bien pour la première solution...