Langage C : SAISIE DE NOMBRES ET DE CARACTERES AU CLAVIER (Cours et Exercices corrigés)
Monday, June 6, 2011     17:19
  • Mon @ IP: 54.224.102.26



retour

Poster un commentaire ou une réponse

SAISIE DE NOMBRES ET DE CARACTERES AU CLAVIER (Cours et Exercices corrigés)

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 10:37:37

----------------------La fonction GETCH------------------------

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 10:38:41

La fonction getch, appartenant à la bibliothèque conio.h permet la saisie clavier d' un caractère alphanumérique, sans écho écran. La saisie s'arrête dès que le caractère a été frappé.

La fonction getch n'est pas définie dans la norme ANSI mais elle peut exister dans la bibliothèque d'autres compilateurs.

On peut utiliser getch de deux façons:

- sans retour de variable au programme:

Exemple: printf("POUR CONTINUER FRAPPER UNE TOUCHE ");
getch();

- avec retour de variable au programme:

Exemple:char alpha;
printf("ENTRER UN CARACTERE (ATTENTION PAS DE RETURN) ");
alpha = getch();
printf("\nVOICI CE CARACTERE: %c",alpha);

Les parenthèses vides de getch() signifient qu'aucun paramètre n'est passé à cette fonction par le programme.


LA FONCTION SCANF



La fonction scanf, appartenant à la bibliothèque stdio.h, permet la saisie clavier de n'importe quel type de variable.

Les variables à saisir sont formatées, le nom de la variable est précédé du symbole & désignant l'adresse de la variable (On reverra ce symbole dans le chapitre sur les pointeurs).
La saisie s'arrête avec "RETURN" (c'est à dire LF), les éléments saisis s'affichent à l'écran (saisie avec écho écran).

Tous les éléments saisis après un caractère d'espacement (espace, tabulation) sont ignorés.
Exemples:char alpha;
int i;
float r;
scanf("%c",&alpha);/* saisie d'un caractère */
scanf("%d",&i);/* saisie d'un nombre entier en décimal */
scanf("%x",&i);/* saisie d'un nombre entier en hexadécimal*/
scanf("%f",&r);/* saisie d'un nombre réel */


Remarque: Si l'utilisateur ne respecte pas le format indiqué dans scanf, la saisie est ignorée. Aucune erreur n'est générée.

Exemple:char alpha;
scanf("%d",&alpha);
Si l'utilisateur saisie 97 tout va bien, alpha devient le caractère dont le code ASCII vaut 97.
Si l'utilisateur saisie a, sa saisie est ignorée.


Exercice II_1:

Saisir un caractère au clavier, afficher son code ASCII à l'écran. Soigner l'affichage.

Exercice II_2: Saisir un nombre entier en décimal au clavier, l'afficher en hexadécimal à l'écran. Soigner l'affichage.

Exercice II_3:

Que va-t-il se passer lors de l'exécution du programme suivant, si l'utilisateur saisit 67?

#include <stdio.h>
#include <conio.h>
void main()
{
char c;
printf("ENTRER UN CARACTERE: ");
scanf("%c",&c);
printf("VOICI SON CODE ASCII: %d\n",c);
printf("POUR CONTINUER FRAPPER UNE TOUCHE ");
getch();
}

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 10:39:14

-----------------NOTION DE FLUX D'ENTREE------------------

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 10:39:24

Lorsque l'on saisit au clavier une suite de caractères terminés par "RETURN" ces caractères sont rangés dans un tampon (ou buffer) de type FIFO (First In/First Out), le dernier caractère rangé dans le tampon est LF (code ASCII 0x0A).
Cette suite de caractères est appelée flux d'entrée.
La taille du tampon dépend de la machine et du compilateur utilisés. Sur un PC et en TURBOC, la taille du tampon est de 127 caractères.

Une compilation du programme vide le tampon.


Publicité

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 10:39:39

----------------------LA FONCTION SCANF DEUXIEME APPROCHE----------------

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 10:40:28

La fonction scanf ne se comporte pas tout à fait comme décrit plus haut. Si le tampon est vide, tout se passe comme précédemment décrit.
Au contraire, si le tampon n'est pas vide, la fonction scanf en teste le premier élément, s'il correspond au format de la variable invoquée, le tampon perd cet élément et la variable en prend la valeur.

Tout caractère ou nombre saisi au clavier et non pris en compte par la fonction scanf est rangé dans le tampon.


Exemple et Exercice II-4:


#include <stdio.h>
#include <conio.h>
void main()
{
char c1,c2;
printf("ENTRER UN CARACTERE: ");
scanf("%c",&c1);
printf("VOICI SON CODE ASCII EN HEXADECIMAL: %x\n",c1);
printf("ENTRER UN AUTRE CARACTERE: ");
scanf("%c",&c2);
printf("VOICI SON CODE ASCII EN HEXADECIMAL: %x\n",c2);
printf("POUR CONTINUER FRAPPER UNE TOUCHE ");
getch();
}
Si l'utilisateur saisit K pour c1, le programme donnera l'écran d'exécution suivant:


ENTRER UN CARACTERE: K
VOICI SON CODE ASCII EN HEXADECIMAL: 4b
ENTRER UN AUTRE CARACTERE: VOICI SON CODE ASCII EN HEXADECIMAL: a


Lors de la saisie de K, le caractere LF est rangé dans le tampon. Lors du deuxième appel à scanf, le tampon n'est pas vide, l'utilisateur ne peut effectuer sa saisie clavier, le code ascii de LF est affiché à l'écran.
A l'issue de l'exécution, le tampon est vide.


Exercice II_5: Le programme suivant s'exécute-t-il "correctement" ? Que contient le tampon à l'issue de l'exécution ?

#include <stdio.h>
#include <conio.h>
void main()
{
char c;
int i;
printf("ENTRER UN CARACTERE: ");
scanf("%c",&c);
printf("VOICI SON CODE ASCII EN HEXADECIMAL: %x\n",c);
printf("ENTRER UN NOMBRE: ");
scanf("%d",&i);
printf("VOICI CE NOMBRE EN HEXADECIMAL: %x\n",i);
printf("POUR CONTINUER FRAPPER UNE TOUCHE ");
getch();
}

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 10:40:51

Exercice II_6: Le programme suivant s'exécute-t-il "correctement" ? Que contient le tampon à l'issue de l'exécution ?

#include <stdio.h>
#include <conio.h>
void main()
{
char c;
int i;
printf("ENTRER UN NOMBRE: ");
scanf("%d",&i);
printf("VOICI CE NOMBRE EN HEXADECIMAL: %x\n",i);
printf("ENTRER UN CARACTERE: ");
scanf("%c",&c);

printf("VOICI SON CODE ASCII EN HEXADECIMAL: %x\n",c);
printf("POUR CONTINUER FRAPPER UNE TOUCHE ");
getch();
}

Exercice II_7: Dans l'exercice II_4 que se passe-t-il si, lors de la première saisie, l'utilisateur tape 67 ?


Remarque: En TURBOC la fonction flushall() permet de vider le tampon d'entrée. En l'invoquant après un appel à scanf, on se débarrasse des problèmes de flux d'entrée.

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 10:41:13

--------------------La fonction GETCHAR--------------------

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 10:41:22

La fonction getchar pemet la saisie d'un caractère (char). Elle appartient à la bibliothèque stdio.h. Les 2 écritures suivantes sont équivalentes:

char c;char c;
printf("ENTRER UN CARACTERE: ");printf("ENTRER UN CARACTERE: ");
scanf("%c",&c);c = getchar();

Non formatée, la fonction getchar est moins gourmande en place mémoire que scanf. Il vaut mieux l'utiliser quand cela est possible; getchar utilise le flux d'entrée exactement comme scanf.

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 10:41:33

-------------------CORRIGE DES EXERCICES----------------------


Publicité

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 10:42:00

Exercice II_1:

#include <stdio.h>
#include <conio.h>
void main()
{
char c;
printf("ENTRER UN CARACTERE: ");
scanf("%c",&c);
printf("VOICI SON CODE ASCII EN DECIMAL: %d\n",c);
puts("Pour continuer frapper une touche...");
getch();
}
Exercice II_2:

#include <stdio.h>
#include <conio.h>
void main()
{
int nombre;
printf("ENTRER UN NOMBRE ENTIER: ");
scanf("%d",&nombre);
printf("VOICI CE NOMBRE EN HEXADECIMAL: %x\n",nombre);
printf("POUR CONTINUER FRAPPER UNE TOUCHE ");
getch();
}

Exercice II_3: Seul le caractère 6 est pris en compte. L'affichage suivant la saisie donnera 54, c'est à dire le code ASCII de 6.


Exercice II_5: Oui car lors du deuxième appel à scanf, le programme attend un entier(int), alors que le tampon ne contient qu'un caractère (char).
A l'issue de l'exécution le tampon contient les deux caractères LF.


Exercice II_6: Non car à l'issue de la première saisie, le tampon contient le caractère LF qui sera lu lors du deuxième appel à scanf. Apres exécution du programme, le tampon est vide.


Exercice II_7: L'affichage de c1 en hexadécimal donne 36 c'est à dire le code ASCII de 6, l'utilisateur ne peut saisir c2, l'affichage de c2 en hexadécimal donne 37 c'est à dire le code ASCII de 7.

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 10:52:33

Voici les programmes exécutable des exercices

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 10:53:08

EXII_1.CPP

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 10:53:43

EXII_2.CPP

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 10:53:52

EXII_3.CPP

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 10:54:03

EXII_4.CPP


Publicité

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 10:54:15

EXII_5.CPP

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 10:54:26

EXII_6.CPP

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 27-01-2015 à 10:55:05

Si vous utilisez Code Blocks remplacez "void main()" par "int main()"

Poster un commentaire ou une réponse :
Poster
     Ajouter un document à la discussion:
       

Actualité informatique et High-Tech

16-10-2015               lire

Dropbox propose aussi un outil d'écriture collaborative à son service

16-10-2015               lire

Bientôt des DRM dans des JPEG

17-04-2015               lire

Google propose une requête pour retrouver son téléphone

17-04-2015               lire

Youtube prépare une offre payante sans publicité

17-04-2015               lire

Sony Pictures : Des milliers de mails et documents confidentiels dévoilés

07-04-2015               lire

T411 bloqué par les FAI français

07-04-2015               lire

NVIDIA publie un pilote correctif et met à jour SHIELD Hub ainsi que GeForce Experience

07-04-2015               lire

Linkedin acquiert la start-up Refresh

03-04-2015               lire

Chromebit, la clé USB Google et Asus qui transforme n’importe quel écran en ordinateur

03-04-2015               lire

Une personne aurait pu supprimer toutes les vidéos d’une chaine Youtube en quelques secondes

03-04-2015               lire

Firefox 37 apporte un cryptage complémentaire à HTTPS

03-04-2015               lire

Windows XP, ce système qui ne veut pas mourir

02-04-2015               lire

Piratage de Labio.fr : le laboratoire répond à nos questions et ne payera pas la rançon

02-04-2015               lire

AWS lance des instances géantes avec 48 To de stockage

02-04-2015               lire

WhatsApp ajoute les appels gratuits et illimités à son application

31-03-2015               lire

Nadim Kobeissi : de Cryptocat à Peerio, du piratage au doctorat

31-03-2015               lire

L'Université de Nantes inaugure son datacenter modulaire taillé pour le HPC

31-03-2015               lire

GitHub victime d’une attaque DDoS majeure

27-03-2015               lire

Googlinette : les recherches de Google en devinettes

27-03-2015               lire

F8 : Facebook ouvre Messenger au e-commerce

27-03-2015               lire

À la SNCF, une fuite de données simple comme une touche F5

23-03-2015               lire

Des satellites GPS de Boeing affectés par une erreur technique

23-03-2015               lire

Plus de 700 000 routeurs ADSL vulnérables au piratage

23-03-2015               lire

Twitter sous le coup d’une action collective pour discrimination

22-03-2015               lire

Les montres connectées étaient déjà présentes dans les films, séries et dessins animés

22-03-2015               lire

Une Audi autonome va traverser les USA de SF à New York

20-03-2015               lire

Éclipse du Soleil : comment la suivre en direct sur Internet

20-03-2015               lire

Projet Leap : des bus 2.0 à San Francisco

20-03-2015               lire

Nvidia dévoile Drive PX, un système de conduite autonome

17-03-2015               lire

Embarquez pour Apollo 11, expérience virtuelle hors du commun

16-03-2015               lire

Ce jour où Google a exposé les données de 282 867 domaines

16-03-2015               lire

Yahoo publie le code de son plug-in de chiffrement mail

16-03-2015               lire

Après un an sans mise à jour, HAWKEN revient à la vie

12-03-2015               lire

Le big data au service du séquençage ADN pour accélérer les diagnostics

12-03-2015               lire

Clap de fin pour PlayStation Mobile

12-03-2015               lire

Apple : retour à la normale après une panne de plus de 11 heures

12-03-2015               lire

Ericsson va supprimer 2 200 postes en Suède

12-03-2015               lire

Le plan de Fleur Pellerin contre le piratage sur Internet

10-03-2015               lire

Apple Watch, Watch Edition et Watch Sport : de 399 à 18.000 euros !

10-03-2015               lire

Apple présente le “nouveau MacBook” qui remplace le MacBook Air

09-03-2015               lire

Google développe une version d'Android pour la réalité virtuelle

09-03-2015               lire

Quand la MPAA demande à Google de déréférencer son propre site

09-03-2015               lire

Heroes of the Dorm : un tournoi HotS avec 450 000 $ de bourses d'études à gagner

09-03-2015               lire

1 milliard d'adresses mails volées, 2 pirates inculpés

09-03-2015               lire

VMware accusé de violation de code Linux

09-03-2015               lire

Les drones civils bientôt immatriculés ?

05-03-2015               lire

7 sites qui permettent d’envoyer des fichiers de + ou – 2 Go

04-03-2015               lire

Smartphones : Apple passe en tête devant Samsung56% des consommateurs inquiets pour leurs données en Europe

04-03-2015               lire

Smartphones : Apple passe en tête devant Samsung

04-03-2015               lire

MWC 2015 : Onevisage pésente un scan facial 3D pour smartphones

04-03-2015               lire

Caméras sportives : Xiaomi s'attaque au monopole GoPro

04-03-2015               lire

Yi Camera, la caméra embarquée de Xiaomi à moins de 60€

04-03-2015               lire

Faille FREAK : quand des connexions SSL/TLS se contentent d'un chiffrement RSA sur... 512 bits

04-03-2015               lire

Bientôt des pubs sur Google Play (Android)

28-02-2015               lire

En partenariat avec "Positive Technologies", Esprit a l'honneur d'inviter ses étudiants à la 1ère édition de l’événement ESPRIT HACK DAYS dans les locaux d'ESPRIT Chotrana 2 et ce le 03 et le 04 Mars 2015.

28-02-2015               lire

La direction des stages d’ESPRIT et Ernst & Young ont le plaisir d'inviter ses étudiants à la journée de l’entreprise du mercredi 4 mars 2015 dans la salle E5 d’ESPRIT Factory.

25-02-2015               lire

Adobe fête les 25 ans de son logiciel Photoshop

25-02-2015               lire

Linux 4.0 : gros numéro et petite version

Haut de page.