[C] Opération sur un tableau
Résolu/Fermé
Mr. White
-
17 janv. 2011 à 13:30
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 19 janv. 2011 à 21:36
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 19 janv. 2011 à 21:36
A voir également:
- [C] Opération sur un tableau
- Tableau croisé dynamique - Guide
- Tableau ascii - Guide
- Tableau word - Guide
- Comment imprimer un tableau excel sur une seule page - Guide
- Tableau de combinaison loto 5/90 - Forum Excel
5 réponses
Char Snipeur
Messages postés
9696
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 297
17 janv. 2011 à 14:17
17 janv. 2011 à 14:17
pour debuguer, fait un printf de tout ce que tu es sensé avoir lu au clavier après le fgets. Ton scanf("%c",e); peut causer des soucis de tampon clavier.
Ta suppresion de ligne est fausse (pourquoi 18 ?)
Ta suppresion de ligne est fausse (pourquoi 18 ?)
J'ai fait un :
printf(%c ", &e);
printf("%d", &num);
en fin de programme mais ça refuse de compiler :
editeur.c:93: warning: format `%c' expects type `int', but argument 2 has type `char *'
editeur.c:94: warning: format `%d' expects type `int', but argument 2 has type `int *'
Je me demandais par ailleurs si je devais pas utiliser un fscanf pour modifier mon tableau.
printf(%c ", &e);
printf("%d", &num);
en fin de programme mais ça refuse de compiler :
editeur.c:93: warning: format `%c' expects type `int', but argument 2 has type `char *'
editeur.c:94: warning: format `%d' expects type `int', but argument 2 has type `int *'
Je me demandais par ailleurs si je devais pas utiliser un fscanf pour modifier mon tableau.
Char Snipeur
Messages postés
9696
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 297
17 janv. 2011 à 15:21
17 janv. 2011 à 15:21
printf(%c\n ", e);
printf("%d\n", num);
C'est mieux. Je crois que fgets est mieux. met des printf aussi après les fgets.
printf("%d\n", num);
C'est mieux. Je crois que fgets est mieux. met des printf aussi après les fgets.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Char Snipeur
Messages postés
9696
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 297
17 janv. 2011 à 16:22
17 janv. 2011 à 16:22
case 'm': /*Modification d'une ligne*/ fgets(temp, sizeof(temp), stdin); // tu lis sur l'entrée standard et met dans temp printf ("Quelle ligne ? ");// affichage du message sscanf(temp, "%d", &num);// tu lis le numéro de la ligne depuis temp fgets(text[num],80,stdin);// tu saisi le nouveau texte depuis l'entrée standard break;
Ce qui est tordu là dedans, c'est que tu entres le numéro de la ligne avant la demande.
Char Snipeur
Messages postés
9696
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 297
18 janv. 2011 à 08:20
18 janv. 2011 à 08:20
attention, le printf peut être mis en buffer. C'est à dire que son affichage peut être retardé.
C'est normal qu'on te demande rien, il n'y a rien de marqué. Essai :
C'est normal qu'on te demande rien, il n'y a rien de marqué. Essai :
case 'm': /*Modification d'une ligne*/ printf ("Quelle ligne ? ");fflush(stdout);// affichage du message fgets(temp, sizeof(temp), stdin); // tu lis sur l'entrée standard et met dans temp sscanf(temp, "%d", &num);// tu lis le numéro de la ligne depuis temp printf("DEBUG : numero lu : %d\n",num);fflush(stdout); printf("entre nouvelle ligne\n");fflush(stdout); fgets(text[num],80,stdin);// tu saisi le nouveau texte depuis l'entrée standard printf("DEBUG : nouvelle ligne : %s\n",text[num]);fflush(stdout); break;
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 835
18 janv. 2011 à 08:28
18 janv. 2011 à 08:28
Bonjour,
J'ai pas tout lu.
Mais il n'y a pas besoin de fflush(stdout) dans ces cas car il y a affichage explicite.
Par contre si le fgets donne l'impression de ne pas marcher, c'est peut-être que le buffer stdin n'a pas été vidé avant. Es-tu sûr qu'il est bien vidé ?
J'ai pas tout lu.
Mais il n'y a pas besoin de fflush(stdout) dans ces cas car il y a affichage explicite.
Par contre si le fgets donne l'impression de ne pas marcher, c'est peut-être que le buffer stdin n'a pas été vidé avant. Es-tu sûr qu'il est bien vidé ?
Char Snipeur
Messages postés
9696
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 297
18 janv. 2011 à 08:49
18 janv. 2011 à 08:49
"il n'y a pas besoin de fflush(stdout) dans ces cas car il y a affichage explicite. "*
Explique STP.
Explique STP.
Salut Char Snipeur,
Merci pour ton aide.
Voilà ce que me renvois la console avec ton code :
A aucun moment on me demande le numéro de ligne, ça passe directement à DEBUG numero lu : 15149336
Je persiste à dire que le problème vient du fgets.
Encore merci. Comment vider le buffer stdin ?
Merci pour ton aide.
Voilà ce que me renvois la console avec ton code :
Que voulez-vous faire ? : m Quelle ligne ? DEBUG : numero lu : 15149336 entre nouvelle ligne salut Erreur de segmentation
A aucun moment on me demande le numéro de ligne, ça passe directement à DEBUG numero lu : 15149336
Je persiste à dire que le problème vient du fgets.
Encore merci. Comment vider le buffer stdin ?