[C] Opération sur un tableau
Résolu/Fermé
Mr. White
-
17 janv. 2011 à 13:30
Char Snipeur Messages postés 9688 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 2 octobre 2020 - 19 janv. 2011 à 21:36
Char Snipeur Messages postés 9688 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 2 octobre 2020 - 19 janv. 2011 à 21:36
A voir également:
- [C] Opération sur un tableau
- Tableau croisé dynamique - Guide
- Afficher un tableau en c - Forum C
- Tableau ascii - Guide
- Extraire des données d'un tableau excel vers un autre tableau ✓ - Forum Excel
- Impossible d'effectuer l'opération car vous ne disposez pas des autorisations requises ✓ - Forum MacOS
5 réponses
Char Snipeur
Messages postés
9688
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
2 octobre 2020
1 328
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
9688
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
2 octobre 2020
1 328
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
9688
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
2 octobre 2020
1 328
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
9688
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
2 octobre 2020
1 328
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 816
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
9688
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
2 octobre 2020
1 328
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 ?