Langage C, vérifier saisie numérique
sofianrob
Messages postés
1
Date d'inscription
Statut
Membre
Dernière intervention
-
fiddy Messages postés 441 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 441 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je suis débutant dans le langage C et je voudrais afficher un message erreur quand la saisie n'est pas numérique. le problème c'est que si je met une lettre à la place d'une note, j'ai le message "introduisez une note qui apparait en boucle", merci pour votre aide.
int compteur = 0;
float note = 0, tot = 0;
printf("Statistiques relatives a une suite de notes\n");
do
{
printf("introduisez une note : \n");
scanf("%f", ¬e);
tot = tot + note;
compteur = compteur + 1;
} while (note >= 0);
if (compteur != 0)
{
tot = tot - note;
tot = tot / (compteur - 1);
printf("votre moyenne est de : %f", tot);
}
else
{
printf("aucune note valide");
}
return 0;
}
Je suis débutant dans le langage C et je voudrais afficher un message erreur quand la saisie n'est pas numérique. le problème c'est que si je met une lettre à la place d'une note, j'ai le message "introduisez une note qui apparait en boucle", merci pour votre aide.
int compteur = 0;
float note = 0, tot = 0;
printf("Statistiques relatives a une suite de notes\n");
do
{
printf("introduisez une note : \n");
scanf("%f", ¬e);
tot = tot + note;
compteur = compteur + 1;
} while (note >= 0);
if (compteur != 0)
{
tot = tot - note;
tot = tot / (compteur - 1);
printf("votre moyenne est de : %f", tot);
}
else
{
printf("aucune note valide");
}
return 0;
}
2 réponses
-
Tu as plusieurs problèmes:
- la boucle vient du fait qu'il est nécessaire de vider le buffer avant toute saisie,
- d'autre part si tu rentres une lettre , 'scanf' va le traduire en float... c'est-à-dire zéro! Donc c'est comme si tu avais saisi '0'.
En passant, il vaut mieux travailler avec des 'double' qu'avec des 'float'.
Bonne continuation. -
Je plussoie le commentaire de loupis, auquel je rajoute :
Pour vérifier s'il s'agit bien d'un nombre, tu peux utiliser la fonction strtol ou sinon avec scanf tu fais une boucle while jusqu'à ce que scanf te renvoie 1. Bien sûr, il ne faudra pas oublier de vider le buffer clavier.
Cdlt,