Vous êtes sur la page 1sur 7

CHAPITRE2

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.

Vous aimerez peut-être aussi