Académique Documents
Professionnel Documents
Culture Documents
SAISIEDENOMBRESETDECARACTERESAUCLAVIER
LAFONCTIONGETCH
Lafonctiongetch,appartenantlabibliothqueconio.hpermetlasaisieclavierd'un
caractrealphanumrique,sanschocran.Lasaisies'arrtedsquelecaractreat
frapp.
Lafonctiongetchn'estpasdfiniedanslanormeANSImaisellepeutexisterdansla
bibliothqued'autrescompilateurs.
Onpeututilisergetchdedeuxfaons:
sansretourdevariableauprogramme:
Exemple:
printf("POURCONTINUERFRAPPERUNETOUCHE");
getch();
avecretourdevariableauprogramme:
Exemple:
charalpha;
printf("ENTRERUNCARACTERE(ATTENTIONPASDERETURN)");
alpha=getch();
printf("\nVOICICECARACTERE:%c",alpha);
Lesparenthsesvidesdegetch()signifientqu'aucunparamtren'estpasscette
fonctionparleprogramme.
LAFONCTIONSCANF
Lafonctionscanf,appartenantlabibliothquestdio.h,permetlasaisieclavierden'importe
queltypedevariable.
Lesvariablessaisirsontformates,lenomdelavariableestprcddusymbole&
dsignantl'adressedelavariable(Onreverracesymboledanslechapitresurlespointeurs).
Lasaisies'arrteavec"RETURN"(c'estdireLF),leslmentssaisiss'affichentl'cran
(saisieavecchocran).
Tousleslmentssaisisaprsuncaractred'espacement(espace,tabulation)sont
ignors.Exemples: charalpha;
inti;
floatr;
scanf("%c",&alpha);
/*saisied'uncaractre*/
scanf("%d",&i);
/*saisied'unnombreentierendcimal*/
scanf("%x",&i);
/*saisied'unnombreentierenhexadcimal*/
scanf("%f",&r);
/*saisied'unnombrerel*/
Remarque:Sil'utilisateurnerespectepasleformatindiqudansscanf,lasaisieestignore.
Aucuneerreurn'estgnre.
Exemple:
charalpha;
scanf("%d",&alpha);
Sil'utilisateursaisie97toutvabien,alphadevientlecaractredontlecodeASCIIvaut97.
Sil'utilisateursaisiea,sasaisieestignore.
ExerciceII_1:
Saisiruncaractreauclavier,affichersoncodeASCIIl'cran.Soignerl'affichage.
ExerciceII_2:Saisirunnombreentierendcimalauclavier,l'afficherenhexadcimal
l'cran.Soignerl'affichage.
ExerciceII_3:
Quevatilsepasserlorsdel'excutionduprogrammesuivant,sil'utilisateursaisit67?
#include<stdio.h>
#include<conio.h>
voidmain()
{
charc;
printf("ENTRERUNCARACTERE:");
scanf("%c",&c);
printf("VOICISONCODEASCII:%d\n",c);
printf("POURCONTINUERFRAPPERUNETOUCHE");
getch();
}NOTIONDEFLUXD'ENTREE
Lorsquel'onsaisitauclavierunesuitedecaractresterminspar"RETURN"cescaractres
sontrangsdansuntampon(oubuffer)detypeFIFO(FirstIn/FirstOut),lederniercaractre
rangdansletamponestLF(codeASCII0x0A).
Cettesuitedecaractresestappelefluxd'entre.
Latailledutampondpenddelamachineetducompilateurutiliss.SurunPCeten
TURBOC,latailledutamponestde127caractres.
Unecompilationduprogrammevideletampon.
LAFONCTIONSCANF
DEUXIEMEAPPROCHE
Lafonctionscanfnesecomportepastoutfaitcommedcritplushaut.Siletamponestvide,
toutsepassecommeprcdemmentdcrit.
Aucontraire,siletamponn'estpasvide,lafonctionscanfentestelepremierlment,s'il
correspondauformatdelavariableinvoque,letamponperdcetlmentetlavariableen
prendlavaleur.
Toutcaractreounombresaisiauclavieretnonprisencompteparlafonctionscanf
estrangdansletampon.
ExempleetExerciceII4:
#include<stdio.h>
#include<conio.h>
voidmain()
{
charc1,c2;
printf("ENTRERUNCARACTERE:");
scanf("%c",&c1);
printf("VOICISONCODEASCIIENHEXADECIMAL:%x\n",c1);
printf("ENTRERUNAUTRECARACTERE:");
scanf("%c",&c2);
printf("VOICISONCODEASCIIENHEXADECIMAL:%x\n",c2);
printf("POURCONTINUERFRAPPERUNETOUCHE");
getch();
}Sil'utilisateursaisitKpourc1,leprogrammedonneral'crand'excutionsuivant:
ENTRERUNCARACTERE:K
VOICISONCODEASCIIENHEXADECIMAL:4b
ENTRERUNAUTRECARACTERE:VOICISONCODEASCIIENHEXADECIMAL:a
LorsdelasaisiedeK,lecaractereLFestrangdansletampon.Lorsdudeuximeappel
scanf,letamponn'estpasvide,l'utilisateurnepeuteffectuersasaisieclavier,lecodeasciide
LFestaffichl'cran.
Al'issuedel'excution,letamponestvide.
ExerciceII_5:Leprogrammesuivants'excutetil"correctement"?Quecontientletampon
l'issuedel'excution?
#include<stdio.h>
#include<conio.h>
voidmain()
{
charc;
inti;
printf("ENTRERUNCARACTERE:");
scanf("%c",&c);
printf("VOICISONCODEASCIIENHEXADECIMAL:%x\n",c);
printf("ENTRERUNNOMBRE:");
scanf("%d",&i);
printf("VOICICENOMBREENHEXADECIMAL:%x\n",i);
printf("POURCONTINUERFRAPPERUNETOUCHE");
getch();
}
ExerciceII_6:Leprogrammesuivants'excutetil"correctement"?Quecontientletampon
l'issuedel'excution?
#include<stdio.h>
#include<conio.h>
voidmain()
{
charc;
inti;
printf("ENTRERUNNOMBRE:");
scanf("%d",&i);
printf("VOICICENOMBREENHEXADECIMAL:%x\n",i);
printf("ENTRERUNCARACTERE:");
scanf("%c",&c);printf("VOICISONCODEASCIIENHEXADECIMAL:%x\n",c);
printf("POURCONTINUERFRAPPERUNETOUCHE");
getch();
}
ExerciceII_7:Dansl'exerciceII_4quesepassetilsi,lorsdelapremiresaisie,l'utilisateur
tape67?
Remarque:EnTURBOClafonctionflushall()permetdeviderletampond'entre.En
l'invoquantaprsunappelscanf,onsedbarrassedesproblmesdefluxd'entre.
LAFONCTIONGETCHAR
Lafonctiongetcharpemetlasaisied'uncaractre(char).Elleappartientlabibliothque
stdio.h.Les2crituressuivantessontquivalentes:
charc;
printf("ENTRERUNCARACTERE:");
scanf("%c",&c);
charc;
printf("ENTRERUNCARACTERE:");
c=getchar();
Nonformate,lafonctiongetcharestmoinsgourmandeenplacemmoirequescanf.Ilvaut
mieuxl'utiliserquandcelaestpossible;getcharutiliselefluxd'entreexactementcomme
scanf.
CORRIGEDESEXERCICES
ExerciceII_1:
#include<stdio.h>
#include<conio.h>
voidmain()
{
charc;
printf("ENTRERUNCARACTERE:");
scanf("%c",&c);
printf("VOICISONCODEASCIIENDECIMAL:%d\n",c);
puts("Pourcontinuerfrapperunetouche...");
getch();
}ExerciceII_2:
#include<stdio.h>
#include<conio.h>
voidmain()
{
intnombre;
printf("ENTRERUNNOMBREENTIER:");
scanf("%d",&nombre);
printf("VOICICENOMBREENHEXADECIMAL:%x\n",nombre);
printf("POURCONTINUERFRAPPERUNETOUCHE");
getch();
}
ExerciceII_3:Seullecaractre6estprisencompte.L'affichagesuivantlasaisiedonnera54,
c'estdirelecodeASCIIde6.
ExerciceII_5:Ouicarlorsdudeuximeappelscanf,leprogrammeattendunentier(int),
alorsqueletamponnecontientqu'uncaractre(char).
Al'issuedel'excutionletamponcontientlesdeuxcaractresLF.
ExerciceII_6:Noncarl'issuedelapremiresaisie,letamponcontientlecaractreLFqui
seralulorsdudeuximeappelscanf.Apresexcutionduprogramme,letamponestvide.
ExerciceII_7:L'affichagedec1enhexadcimaldonne36c'estdirelecodeASCIIde6,
l'utilisateurnepeutsaisirc2,l'affichagedec2enhexadcimaldonne37c'estdirelecode
ASCIIde7.