1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
#include <stdio.h>
#include <stdlib.h>
#define AAFFICHER 1 /* Afficher l'erreur */
#define DEJAAFFICHER 0 /* L'affichage a déjà était fait*/
int main()
{
int n; //var permettant de recevoir l'erreur, ou pas, de scanf
char c; //var permettant à la boucle while de s'arrêter
int val = 0;
int j = 0; //Compteur du nombre d'erreur (de caractère introduit par erreur.)
int test = AAFFICHER; //test qui permet d'indiquer si on a déjà affiché une première fois l'erreur.
printf("Saisir une valeur entière : ");
n = scanf("%d", &val);
while(n != 1)
{
/*Le problème ici est, à chaque fois qu'une suite de caractère est introduite par erreur,
la boucle refait un cycle en affichant le 'printf' ci-dessous pour chaque caractère et non pour la suite de caractère.
*/
if(test == AAFFICHER) //test qui permet d'indiquer si on a déjà afficher une première fois.
{
printf("\n\nErreur!\n\n");
printf("Saisir une valeur entière : ");
test = DEJAAFFICHER; //On a déjà afficher une première fois
j = DEJAAFFICHER; /*remise à zéro pour permettre l'affichage en cas de reintroduction d'une suite
de caractères erronés à la suite d'une première introduction.*/
}
scanf("%c", &c); /*permet à la première boucle while de s'arrêter et de ne pas
partire en boucle infinie.*/
/*2ème boucle while:
Tant qu'il y a une suite de caractères qui ne correspondent pas à une valeur 'int', j++.
Si j = 0, cela veut dire que l'on rentre dans un nouveau cycle d'erreur (suite de caractère)
et donc il faut réafficher le 'printf' et donc, test = 1.
Sinon, ne pas réafficher.
En fait, cela permet de savoir si l'on a ou pas affichier une fois le 'printf' et si
c'est le cas de ne pas le réafficher à moins que l'on introduise de nouveau une suite
de caractère erroné.
*/
while(c != '\n')
{
scanf("%c", &c);
if(j == AAFFICHER)
test = AAFFICHER;
j++;
}
n = scanf("%d", &val);
}
printf("val = %d\n", val);
return 0;
} |
Partager