Question sur la fonction getchar et le switch

Résolu/Fermé
enigman0001 Messages postés 28 Date d'inscription samedi 30 avril 2016 Statut Membre Dernière intervention 28 décembre 2017 - 6 mai 2017 à 21:25
enigman0001 Messages postés 28 Date d'inscription samedi 30 avril 2016 Statut Membre Dernière intervention 28 décembre 2017 - 7 mai 2017 à 00:55
bonjour

j'ai suis actuellement des cours de programmation en c, et j'ai été amené récemment a créer une fonction lire_caractere() pour récupérer un caractère, pour quoi faire ça au lieu d'utiliser un simple scanf ?

parce que j'ai besoin que mon caractère soit en majuscule, alors même si l’utilisateur vas taper une caractère en minuscule la fonction vas se charger de le transformer en majuscule, de plus c'est une sécurité si jamais l'utilisateur tape plusieurs lettres, la fonction vas récupérer que la première lettre tapée et " vider le buffet " comme on dit, je vous envoie le code pour que vous puissiez mieux savoir de quoi il s'agit.

mais voila , le problème est que ma fonction ne fonctionne pas correctement quand je l'utilise dans un switch, elle ne lit pas le caractère, qu'alors que si je la met au début de mon programme elle fonctionne très bien, et je n'arrive pas a comprendre pour quoi !

ce code marche :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <time.h>
#include <ctype.h>
#include "les prototypes.h"





char lire_caractere();

int main()
{
char lettre = 0;

printf("entrez une lettre :");

lettre = lire_caractere();

printf("\nvoici la lettre : %c", lettre);





return 0;
}

char lire_caractere()
{
char caractere = 0;

caractere = getchar();

caractere = toupper(caractere);

while(getchar() != '\n');

return caractere;
}


voila se qu'il nous donne :


et maintenant, on utilise notre fonction lire_caractere() dans un switch :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <time.h>
#include <ctype.h>
#include "les prototypes.h"





char lire_caractere();

int main()
{
char lettre = 0;
int numero = 0;

printf("tapez 1\n");
scanf("%d", &numero);

switch (numero)
{
case 1:
printf("tapez une lzttre :");
lettre = lire_caractere();
printf("\nvoici la lettre : %c", lettre);
break;
default :
printf("vous n'avez rien tape");
break;

}







return 0;
}

char lire_caractere()
{
char caractere = 0;

caractere = getchar();

caractere = toupper(caractere);

while(getchar() != '\n');

return caractere;
}


et voila se qu'il nous donne :



la lettre n’apparaît pas !, ça parait complètement illogique

si quelqu'un sait d'ou viens le problème , cela m'aiderais beaucoup

merci de vos réponse.
A voir également:

4 réponses

Felice_ Messages postés 265 Date d'inscription mardi 25 avril 2017 Statut Membre Dernière intervention 20 juillet 2017 11
Modifié le 6 mai 2017 à 22:23
Bonjour enigman0001,

C'est parce que la lettre en en fait « \n »

Remplace :
caractere = getchar();


Par :
getchar();
caractere = getchar();
0
enigman0001 Messages postés 28 Date d'inscription samedi 30 avril 2016 Statut Membre Dernière intervention 28 décembre 2017
6 mai 2017 à 23:31
merci beaucoup felice, ta réponse m'a beaucoup aidé

mais je suis coméme curieux d'en savoir plus.

si sa ne te dérange pas peut tu m'expliquer en détaille quel était le problème exactement et quesque ça change quand je remplace

caractere = getchar();


par

getchar();
caractere = getchar();
0
Felice_ Messages postés 265 Date d'inscription mardi 25 avril 2017 Statut Membre Dernière intervention 20 juillet 2017 11
7 mai 2017 à 00:15
Ça vient de la fonction « scan » utilisé avant, celui-ci ne vide pas le tampon.

Donc quand tu fais entrée le caractère « \n » reste dans le tampon.

Ainsi quand tu fais un premier « getchar(); » il récupère ce caractère « \n » et le tampon devient vide.

Après le second récupère bien ton caractère :-).
0
enigman0001 Messages postés 28 Date d'inscription samedi 30 avril 2016 Statut Membre Dernière intervention 28 décembre 2017
7 mai 2017 à 00:55
merci, c'est plus claire maintenant.
0