Bug avec un programme en C !
jittou
Messages postés
14
Statut
Membre
-
jittou Messages postés 14 Statut Membre -
jittou Messages postés 14 Statut Membre -
Salut a tout le monde,
bon voila jai terminer un programme qui calcul les notes !
jai mis ttes les exceptions possible mais il me reste une c'est de permettre a lutilisateur decrire que des nombres.
ex:
printf("veuillez saisir la note : ");
cin>>note;
quand j'écris 1 ou 2 ou 3..... ça marche très bien
mais jecris : kjbeju(des caractères) ça se plante !!
comment permettre a lutilisateur decrire seulement des nombres??
merçii davance :)
bon voila jai terminer un programme qui calcul les notes !
jai mis ttes les exceptions possible mais il me reste une c'est de permettre a lutilisateur decrire que des nombres.
ex:
printf("veuillez saisir la note : ");
cin>>note;
quand j'écris 1 ou 2 ou 3..... ça marche très bien
mais jecris : kjbeju(des caractères) ça se plante !!
comment permettre a lutilisateur decrire seulement des nombres??
merçii davance :)
A voir également:
- Bug avec un programme en C !
- Programme demarrage windows - Guide
- Mettre en veille un programme - Guide
- Bug chromecast - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
- Desinstaller un programme - Guide
2 réponses
Voici comment tu peux faire
Ce qui donne à l'exécution :
Note : dès que scanf va trouver un entier il va l'extraire même si tu mets une chaîne devant ou derrière.
http://www.linux-france.org/article/man-fr/man3/scanf-3.html
La vraie solution consisterait à vérifier que la saisie match bien avec l'expression régulière associée aux entiers, par exemple en utilisant la lib pcre. Mais en C ou C++ pur ce risque d'être un peu plus compliquer à vérifier.
Bonne chance
#include <cstdio>
#include <iostream>
#include <string>
int get_int(){
int x;
int ret;
do{
std::cout << "saisissez un entier" << std::endl;
std::string s;
std::cin >> s;
ret = sscanf(s.c_str(),"%d",&x);
}while(ret != 1);
return x;
}
int main(){
int x = get_int();
std::cout << "x = " << x << std::endl;
return 0;
}
Ce qui donne à l'exécution :
saisissez un entier tapir saisissez un entier 89 x = 89
Note : dès que scanf va trouver un entier il va l'extraire même si tu mets une chaîne devant ou derrière.
saisissez un entier plop 45 67 tapir saisissez un entier x = 45Pour plus d'infos cf la doc de sscanf.
http://www.linux-france.org/article/man-fr/man3/scanf-3.html
La vraie solution consisterait à vérifier que la saisie match bien avec l'expression régulière associée aux entiers, par exemple en utilisant la lib pcre. Mais en C ou C++ pur ce risque d'être un peu plus compliquer à vérifier.
Bonne chance