Problème avec fgets (langage C)
Fermé
aurel94
Messages postés
73
Date d'inscription
dimanche 10 août 2008
Statut
Membre
Dernière intervention
1 décembre 2013
-
20 oct. 2013 à 20:02
[Dal] Messages postés 6062 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 24 mars 2023 - 22 oct. 2013 à 10:45
[Dal] Messages postés 6062 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 24 mars 2023 - 22 oct. 2013 à 10:45
A voir également:
- Problème avec fgets (langage C)
- D langage c ✓ - Forum C
- Langage ascii - Guide
- Et en langage c - Astuces et Solutions
- Langage linux - Forum Linux / Unix
- Mini projet en langage c corrigé - Forum C
4 réponses
aurel94
Messages postés
73
Date d'inscription
dimanche 10 août 2008
Statut
Membre
Dernière intervention
1 décembre 2013
1
20 oct. 2013 à 20:05
20 oct. 2013 à 20:05
J'ai oublier de dire que image_t était une structure créer qui stocke toute le informations nécessaire de l'image (hauteur , largeur , chemin , et valeur des pixels)
[Dal]
Messages postés
6062
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
24 mars 2023
1 044
21 oct. 2013 à 09:23
21 oct. 2013 à 09:23
Salut aurel94,
En faisant :
Tu demandes la lecture d'une ligne deux fois : une fois à l'intérieur de la boucle do / while et une 2ème fois dans le test while.
Dans ton test while, tu devrais tester le contenu de "ligne".
Dal
En faisant :
do {fgets (ligne, 999, pF);
} while (fgets(ligne,999,pF)!=NULL && ligne [0]=='#');
Tu demandes la lecture d'une ligne deux fois : une fois à l'intérieur de la boucle do / while et une 2ème fois dans le test while.
Dans ton test while, tu devrais tester le contenu de "ligne".
Dal
aurel94
Messages postés
73
Date d'inscription
dimanche 10 août 2008
Statut
Membre
Dernière intervention
1 décembre 2013
1
Modifié par aurel94 le 21/10/2013 à 17:25
Modifié par aurel94 le 21/10/2013 à 17:25
Ah oui merci pour cette aide , c'est vrai que sa parait évident , du coup le contenu du fgets je dois le stocker dans un pointeur de caractère pour tester si il a la valeur NULL j'imagine ? :)
[Dal]
Messages postés
6062
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
24 mars 2023
1 044
Modifié par [Dal] le 21/10/2013 à 17:51
Modifié par [Dal] le 21/10/2013 à 17:51
Le "stockage" est déjà fait dans "ligne" quand tu fais
Il faut distinguer ce stockage du retour de la fonction, que tu peux effectivement stocker dans un pointeur additionnel, pour pouvoir le tester, ou tu peux aussi certainement tout regrouper dans une boucle while.
Dal
Edit : retrait de code erroné.
fgets(ligne, 999, pF);, qui est un
char ligne[1000];, ce qui veut dire que "ligne" est un pointeur vers une zone mémoire allouée pouvant contenir 1000 char. C'est "ligne" que tu vas tester dans ton test while pour
ligne[0] == '#'.
Il faut distinguer ce stockage du retour de la fonction, que tu peux effectivement stocker dans un pointeur additionnel, pour pouvoir le tester, ou tu peux aussi certainement tout regrouper dans une boucle while.
Dal
Edit : retrait de code erroné.
[Dal]
Messages postés
6062
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
24 mars 2023
1 044
21 oct. 2013 à 17:56
21 oct. 2013 à 17:56
Comme cela :
ou comme cela :
Dal
P.S. : j'ai ajouté des parenthèses au while, même si elles ne sont pas indispensables, car je n'aime pas me poser des questions existentielles
char * p;
do
{
p = fgets(ligne, 999, pF);
} while ((p != NULL) && (ligne[0] == '#'));
ou comme cela :
while ((fgets(ligne, 999, pF) != NULL) && (ligne[0] == '#'))
/* ignorer les lignes commençant par '#' */ ;
Dal
P.S. : j'ai ajouté des parenthèses au while, même si elles ne sont pas indispensables, car je n'aime pas me poser des questions existentielles
aurel94
Messages postés
73
Date d'inscription
dimanche 10 août 2008
Statut
Membre
Dernière intervention
1 décembre 2013
1
21 oct. 2013 à 22:20
21 oct. 2013 à 22:20
Merci beaucoup pour ces indications très intéressante . Pendant qu'on parle de valeur de retour connais tu les valeurs de retour de sscanf . Car j'aimerai tester si l'initialisation de mes variables avec des valeurs provenant d'une chaîne de caractère c'est bien passer mais je ne connait pas la valeur de retour de sscanf
[Dal]
Messages postés
6062
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
24 mars 2023
1 044
22 oct. 2013 à 10:45
22 oct. 2013 à 10:45
Sur ce site, tu trouves une bonne source d'informations :
http://www.cplusplus.com/reference/cstdio/sscanf/
le prototype est
Le
- en cas de succès : le nombre d'éléments lus attendus remplis avec succès (disons N)
- sinon, de 0 à N-1 : nombre d'éléments lus inférieurs au nombre d'éléments attendus en cas d'erreur de correspondance
- ou EOF si rien n'a pu être lu en raison d'une interruption du flux lu
Dal
http://www.cplusplus.com/reference/cstdio/sscanf/
le prototype est
int sscanf ( const char * s, const char * format, ...);.
Le
intretourné est :
- en cas de succès : le nombre d'éléments lus attendus remplis avec succès (disons N)
- sinon, de 0 à N-1 : nombre d'éléments lus inférieurs au nombre d'éléments attendus en cas d'erreur de correspondance
- ou EOF si rien n'a pu être lu en raison d'une interruption du flux lu
Dal