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 :

Problème dans le code?


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Problème dans le code?
    Bonjour, je suis débutant en C et je me demandais pourquoi mon code ne fonctionnait pas...

    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
    21
    22
    #include <stdlib.h>
    #include <stdio.h>
     
    int main()
    {
        long age= 0;
    printf("Entrez votre age:\n");
    scanf("%ld\n",&age);
     
    if (age >= 18)
    {
            printf("Vous êtes majeur et vous avez %ld ans\n",age);
            }
     
    else
    {
        printf("Vous etes mineur.\n");
    }
     
    system("PAUSE");
    return 0;
    }
    Je n'arrive vraiment pas à trouver l'erreur...
    En fait ce que je voudrais faire c'est que l'on entre un nombre, et en fonction de la valeur, il affiche telle ou telle phrase...

    Merci

  2. #2
    Membre actif Avatar de Biosox
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 298
    Points : 203
    Points
    203
    Par défaut
    hello, j'ai essayé chez moi, et j'ai remplacé par et ça marche.
    La tu te demandes sûrement pourquoi ce petit changement peut faire une différence. La réponse est simple: Parce que scanf est une fonction capricieuse et qu'il faut à tout prix l'éviter!
    je te conseille de lire la
    faq et d'utiliser la méthode proposée a chaque fois que tu dois faire une saisie clavier. ça peut sembler compliqué au début mais ça évitera bien des soucis

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Merci c'est gentil!

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Moi je trouves la fonction scanf plutôt pratique, du moins en console d'aplication.
    il y a juste 2 règles à respecter, ne mettre entre les guillemet "" que la formule d'utilisation de variable, c'est à dire %ld pour les nombre entiers, %lf pour les nombres décimaux et %ls pour les chaines de caractère, ensuite il ne faut jamais oublier de mettre un & devant le nom de la variable ( à part si celle-ci est un pointeur, mais tu n'as surement pas appris çà encore à ton niveau alors ne tiens pas compte de cette derniere remarque je ne voudrais pas t'embrouiller ).

    edit : à excusez moi je n'avais pas lu la FAQ, j'ignorais que scanf était aussi instable .

  5. #5
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par Mr.Freeman
    Moi je trouves la fonction scanf plutôt pratique, du moins en console d'aplication.
    Le probleme de cette fonction est qu'elle donne un faux sentiment de simplicite d'une part, et d'autre part peu de programmeurs installent un mecanisme de controle d'erreur. Si tu as un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    scanf("%lf", &my_double);
    Que se passe-t-il si l'utilisateur entre "a\n" ? scanf() signifie scan formatted -- et il ne faut pas croire que l'utilisateur va toujours suivre le format attendu (c'est un general plutot le contraire).

    Une utilisation robuste de scanf() est difficile (voir ici).

  6. #6
    Membre actif Avatar de Biosox
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 298
    Points : 203
    Points
    203
    Par défaut
    le problème c'est qu'on n'est jamais sur que l'utilisateur ne va pas ecrire une bêtise.

    Je viens de relancer le programme, et au lieu d'écrire "28", j'ai écrit "vingt-huit". Le programme m'a répondu "vous êtes mineur".

    Evidemment, c'est tiré par les cheveux comme exemple, mais ça illustre bien le problème: On peut avoir un comportement indésiré et le pire c'est que ça ne fait pas forcément crasher le programme, mais il semble fonctionner...

    Il vaut donc mieux, à mon sens, prendre une chaîne de caractère depuis le clavier (en faisant attention qu'il n'y ait pas dépassement de capacité, etc...) et ensuite analyser cette chaîne et réagir correctement si. par exemple, elle ne contient pas de nom alors qu'on s'attendait à en recevoir un. Une telle fonction est fastidieuse à écrire une premiere fois, mais une fois faite, tu la garde qqpart bien au chaud et l'inclu dans tous tes projets ou tu as besoin de faire une saisie clavier.

    Enfin c'est juste un point de vue. (toutefois, il est partagé par pas mal de monde je crois)

    EDIT: oups... grillé

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

Discussions similaires

  1. Problème dans un code delphi dans C++Builder
    Par gandf dans le forum Delphi
    Réponses: 5
    Dernier message: 27/03/2007, 23h14
  2. Problème dans un code delphi dans C++Builder
    Par gandf dans le forum C++Builder
    Réponses: 8
    Dernier message: 23/03/2007, 23h12
  3. Réponses: 13
    Dernier message: 17/10/2006, 15h35
  4. [MySQL] Un problème dans le code PHP
    Par jack_1981 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 31/07/2006, 11h06
  5. Quel est le problème dans ce code ?
    Par Luther13 dans le forum C
    Réponses: 12
    Dernier message: 26/08/2003, 16h09

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