IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Un simple problème d'entrée au clavier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    débutant
    Inscrit en
    Mai 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : débutant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 16
    Par défaut Un simple problème d'entrée au clavier
    bnj a tous le monde

    je suis un débutant dans le domain de programmation , j ai voulus cree un simple programme comme un TP des conditions mes j ai racontre un probleme.

    ok voici mon code source

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #include <stdio.h>
    #include <stdlib.h>
     
    int main()
    {
        int n; //ici j'ai declaré un variable qui s apelle n
     
        printf("bonjour; voulez vous entrer votre nombre ?\n ici :",n); //j'ai demendé de entrer un nombre
        scanf("%d",&n);// recevoi ne nombre avec le scanf
        //ici c'est la conditon :
        if(n>0)//c'est n superieur de 0 afiche "positive"
        {
            printf("positive\n");
        }
        else//c'est inferieur de 0 affiche "negative"
        {
             printf("negative");
        }
        return 0;
    }
    ok tous ça et tres bien passer vous aurez demender il est ou le problem ?!

    je vais vous dir
    quand j entre un 5 il affiche positive
    et quand j entre -5 il affiche negative
    ok tres bien

    mais que je entre n importe quelle autre chose par example
    mqsdmlkd

    il affiche aussi positive
    pourqoi ???
    et pourqoi il n'as pas afficher negative ???

  2. #2
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 57
    Par défaut
    Dans le doute je te dirais qu'il recupere le code ascii du premier caractere.
    Pour etre sur tu peux initialiser n a une valeur negative et l'afficher.

  3. #3
    Membre averti
    Homme Profil pro
    débutant
    Inscrit en
    Mai 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : débutant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 16
    Par défaut
    et quesque je ferais pour eviter ce genre de problem

    maitenant c'exst un petit programme ok mais quand il devient a grand programme

    il peut devenir un faille non ?

    il faut que je trouve une reponse
    merci

  4. #4
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 57
    Par défaut
    Je ne connais pas scanf.
    J'utiliserais getline ou read et je parserais ce que j'aurais lus.
    Les man peuvent t'aider aussi.

  5. #5
    Membre éprouvé
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Par défaut
    Avec ton scanf et ta chaine de formatage "%d", tu provoques l'interprétation d'un caractère alphabétique comme étant un nombre.
    Pour éviter ça ne le "cast" pas en entier (%d) mais bien en chaine de caractère (%s) : tu peux ensuite procéder à bon nombres de tests sur chacun des caractères pour savoir s'il s'agit d'un nombre, d'une lettre, en minuscule, majuscule, etc ...
    Quand tu auras vérifié que ta chaine est valide tu peux la convertir en entier avec la fonction atoi.

    Bon courage !

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Quand tu auras vérifié que ta chaine est valide tu peux la convertir en entier avec la fonction atoi.
    Il est préférable d'utiliser strtol à la place, car lorsque atoi retourne 0, on ne peut pas savoir si c'est le résultat de la conversion ou une erreur.

  7. #7
    Membre averti
    Homme Profil pro
    débutant
    Inscrit en
    Mai 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : débutant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 16
    Par défaut
    Merci a tous

    mais vous m avais pas dis comme on utlise c'est truc atoi et ...
    je suis un debutant je n 'ai jamais vu c'est fonction

    et merci

  8. #8
    Membre éprouvé
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Par défaut
    je t'ai mis le lien vers la doc ...

  9. #9
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 484
    Par défaut
    Citation Envoyé par chamsou_23i Voir le message
    il affiche aussi positive
    pourqoi ???
    et pourqoi il n'as pas afficher negative ???
    À noter que tu as remarqué toi-même qu'avec un nombre nul, ton programme doit aussi doit afficher « negative ». Une manière de souligner, donc, qu'une comparaison avec « == » n'a donc pas deux mais trois états possibles : inférieur, supérieur, ou égal.

    Dans le cas présent, quand tu as tapé des lettres, scanf() s'est arrêté dès qu'il a rencontré des caractères qui ne pouvaient pas faire partie de « %d » (soit des chiffres, mais également des blancs, des signes +, -, un point et/ou un exposant éventuel).

    Ton problème vient donc du fait que tu n'as pas initialisé n au départ. scan() n'ayant pu lire le nombre, elle a laissée la variable telle quelle. Celle-ci contient donc une valeur complètement indéfinie (c'est-à-dire ce qu'il y a dans la mémoire à l'endroit où elle a été allouée).

    Si tu remplaces ta ligne 5 par :

    … tu n'auras plus d'ennuis. Cela dit, il te faudra quand même vérifier la valeur de retour de scanf() pour savoir si c'est la valeur initiale que tu lis dans n ou si c'est l'utilisateur qui a explicitement saisi « 0 ».

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème d'entrée clavier qui ne ressort pas
    Par minimorphee dans le forum Débuter avec Java
    Réponses: 11
    Dernier message: 23/03/2014, 18h19
  2. Réponses: 11
    Dernier message: 13/10/2004, 00h58
  3. problème déplacement entre formulaire
    Par estancha dans le forum IHM
    Réponses: 6
    Dernier message: 07/10/2004, 15h22
  4. Comment récuperer des données entrées au clavier?
    Par Elisée A. dans le forum MFC
    Réponses: 2
    Dernier message: 13/02/2004, 07h22
  5. [Turbo Pascal] Entrée au clavier sous forme ******
    Par Upal dans le forum Turbo Pascal
    Réponses: 12
    Dernier message: 15/02/2003, 14h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo