Langage C, vérifier saisie numérique

sofianrob Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -  
fiddy Messages postés 11069 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;
}




A voir également:

2 réponses

loupius Messages postés 697 Date d'inscription   Statut Membre Dernière intervention   148
 
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.
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Petite rectification,
Si tu rentres une lettre, scanf ne fera pas la conversion. Il ne le traduira pas en float, donc c'est comme s'il n'y a avait pas eu de scanf. Par contre le retour de la fonction scanf renverra 0 pour dire qu'aucune conversion a été faite.
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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,
0