Boucle de scanf et getchar pour récupérer des caractères
Résolu/Fermé
marie12
-
20 mars 2019 à 20:58
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 - 22 mars 2019 à 09:26
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 - 22 mars 2019 à 09:26
A voir également:
- Scanf getchar
- Scanf windows - Guide
- Scanf et getchar qui fonctionne aléatoirement...? ✓ - Forum C
- Scanf java ✓ - Forum Programmation
- While(getchar() != '\n'); - Forum C
- Scanf [^\n] ✓ - Forum C
1 réponse
[Dal]
Messages postés
6198
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
13 décembre 2024
1 096
Modifié le 21 mars 2019 à 09:59
Modifié le 21 mars 2019 à 09:59
Salut marie12,
Lorsque tu utilises
Comme
Donc, si on prend en compte ces informations, on comprend qu'il se passe la chose suivante :
1-
2- dans la boucle qui suit,
3- le
4- la boucle reboucle sur 2-, et donc ton tableau est rempli seulement de
Pour recaler l'ensemble, met un
Dal
Lorsque tu utilises
scanf(), cette fonction laisse dans le flux d'entrée standard
stdinle retour à la ligne
'\n'qui est envoyé par l'utilisateur dans
stdinlorsqu'il valide sa saisie avec la touche Entrée.
Comme
'\n'est un char, il est consommé et lu au prochain
scanf("%c"....
Donc, si on prend en compte ces informations, on comprend qu'il se passe la chose suivante :
1-
scanf("%d %d",&f,&g);lit f et g (qui ne servent à rien dans ton code tel que tu l'as posté), et laisse
'\n'dans
stdin...
2- dans la boucle qui suit,
scanf("%c",&T[a][b]);lit
'\n'et le stocke dans T à la position indiquée (tu as donc stocké dans le tableau un retour à la ligne provenant de la fin de la saisie précédente)
3- le
getchar();qui suit lit réellement ce que tu tapes après avoir vu le
printf("\n T[%d][%d]=",a,b);, mais il ne consomme qu'un caractère et de nouveau il y a
'\n'qui reste dans le flux
stdin...
4- la boucle reboucle sur 2-, et donc ton tableau est rempli seulement de
'\n'car tes lectures sont décalées
Pour recaler l'ensemble, met un
getchar();après le premier
scanf("%d %d",&f,&g);, et à ce moment là, tes
getchar();serviront effectivement à consommer les
'\n'et tes
scanf()à lire le
chartapé
Dal
Modifié le 21 mars 2019 à 10:08
C'est parce que tu l'as posté tout en bas de ton message, dans l'espace réservé à ta signature, qui est grisée (tout ce qui est après "--" est la signature).
Quand tu postes du code, poste le avant ta signature et que veille à choisir le langage c en cliquant sur la flèche basse entre l'icône "<>" et l'icône image) et en sélectionnant le langage de programmation c, comme cela :
<code c>
Ton code ici
</code>
Si tu cliques sur l'icône "<>", cela insère des balises de code génériques <code> qui ne font pas de coloration car elles ne précisent pas le langage concerné.
21 mars 2019 à 21:04
Modifié le 22 mars 2019 à 10:11
Utilise correctement le forum, s'il te plaît :
Maintenant, tu poses une nouvelle question, qui n'a rien à voir et tu devrais poster un nouveau fil de discussion avec cette question et lui mettre un titre pertinent comme "Gestion des retours à la ligne avec fgets" et poster correctement ton code en sélectionnant le langage c comme je te l'ai indiqué très précisément ici.
Ton titre d'origine du présent fil n'est pas non plus pertinent "Remplacer un caractère par un autre". Je propose de le changer en "Boucle de scanf et getchar pour récupérer des caractères". Un titre pertinent permet :
- aux personnes du forum de s'intéresser à ton sujet
- aux futures personnes ayant le même type de problème, de tomber sur ce fil en faisant une recherche et d'être aidées comme tu l'as été
Pour ton nouveau problème, tu dois déjà : ouvrir ton fichier en écriture (en utilisant avec "w") et non en lecture (avec "r") pour pouvoir y écrire dans un premier temps avec , puis fermer ton fichier avec pour t'assurer de terminer la création et l'écriture du fichier, et seulement après le rouvrir en lecture avec un nouveau (avec "r"), et ensuite utiliser pour lire et voir comme se comporte ton programme. Fais déjà ces corrections avant de poster ta nouvelle question, s'il reste des problèmes que tu n'as pas pu résoudre.