Bug avec un programme en C !

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 :)
Configuration: Windows XP
Firefox 2.0.0.8

2 réponses

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    Voici comment tu peux faire
    #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 = 45
    
    Pour 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
    0
  2. jittou Messages postés 14 Statut Membre
     
    Salut mamiemando
    1eremen j vous remerçi de votre aide
    jai essayé ton programme il a voulu se compilé
    jai essayé de comprendre tes instruction jnai rien compri :s
    esque je peu avoir une explication si cest possible !! merçiii
    0