Langage C, vérifier saisie numérique

Fermé
sofianrob Messages postés 1 Date d'inscription dimanche 29 août 2010 Statut Membre Dernière intervention 29 août 2010 - 29 août 2010 à 19:03
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 29 août 2010 à 21:31
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 dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
29 août 2010 à 20:48
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
29 août 2010 à 21:29
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
29 août 2010 à 21:31
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