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 :

scanf et printf


Sujet :

C

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 133
    Par défaut scanf et printf
    Bonjour,

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main()
    {
        // Declaration des variables
        long nbr1, nbr2 ;
        char oper[5];
     
        printf("Ce programme va nous permettre de tester des conditions\n");
     
        printf("Entrez un nombre a : ");
        scanf("%ld", &nbr1);
        printf("\nEntrez un nombre b: ");
        scanf("%ld", &nbr2);
     
        printf("\n\nQue voules vous faire ?");
        scanf("%s", &oper);
        printf("\n%s", oper);
     
        // Test des conditions
        if (oper == "plus")
        {
            printf("Vous avez choisi l'addition.\n");
            printf("%ld + %ld = %ld", nbr1, nbr2, nbr1+nbr2);
        }
        else
        {
            printf("Il y a un problème");
        }
     
        system("PAUSE");
        return 0;
    }
    Comme vous avez surement dû l'avoir compris, je cherche avec l'utilisation d'une condition à utiliser l'élément donné dans scanf afin d'établir une addition. Malheureusement, l'addition ne se fait pas mais l'affichage de printf marche dans la boucle du Else marche très bien. Je comprends pas, j'utilise pourtant %s pour le scanf ...

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par metalamania Voir le message
    Comme vous avez surement dû l'avoir compris, je cherche avec l'utilisation d'une condition à utiliser l'élément donné dans scanf afin d'établir une addition. Malheureusement, l'addition ne se fait pas mais l'affichage de printf marche dans la boucle du Else marche très bien. Je comprends pas, j'utilise pourtant %s pour le scanf ...
    La comparaison de chaine se fait avec strcmp(). Mais pourquoi ne pas saisir un caractère ('+', '-' etc.) et tester ce caractère ?

  3. #3
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 121
    Billets dans le blog
    148
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    La comparaison de chaine se fait avec strcmp(). Mais pourquoi ne pas saisir un caractère ('+', '-' etc.) et tester ce caractère ?
    Comme l'a dit Emmanuel, la comparaison en C d'un seul caractère est plus simple.
    Tu mettra dans ton scanf quelque chose de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    char oper = 0;
     
    scanf("%c",&oper);
    Si tu veux vraiment continuer la chaine de caractères ( donc un mot entier ) il te faut utiliser strcmp(). Regarde bien le manuel.
    De plus , si un jour , un utilisateur quelconque , veut taper plus de 5 caractères ( faute de frappe , ou autre ) , il fera planter ton programme.
    Donc pour éviter ceci je conseille un fgetws ( ou une fonction du même genre qui limite la saisie à une valeur voulu ).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  4. #4
    Membre éclairé Avatar de SmileSoft
    Inscrit en
    Mars 2008
    Messages
    436
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 436
    Par défaut
    salut,
    le problème est au niveau du test du if, une chaine de caractère est un tableau en c, dans ton code oper étant le pointeur sur le premier caractère de la chaine, c'est pour ça l'exécution du contenue de if échoue, je te propose une autre solution en mettant oper de type enum comme suit:
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main()
    {
     // Declaration des variables
        long nbr1, nbr2 ;
              enum{aucune=0, addition=1, soustraction=2, multiplication=3,division=4 };
     
        int oper=aucune;
     
        printf("Ce programme va nous permettre de tester des conditions\n");
     
        printf("Entrez un nombre a : ");
        scanf("%ld", &nbr1);
        printf("\nEntrez un nombre b: ");
        scanf("%ld", &nbr2);
     
        printf("\n\nQue voules vous faire ?\n taper 1 pour faire l'adition \n taper 2 pour faire la soustraction\n taper 3 pour faire la multiplication \n taper 4 pour faire lla division \n");
        scanf("%d", &oper);
        printf("\n%d", oper);
     
        // Test des conditions
     
        switch (oper)
        {
            case 1:  {
            printf("Vous avez choisi l'addition.\n");
            printf("%ld + %ld = %ld", nbr1, nbr2, nbr1+nbr2); }
       break;   
       case 2:  {printf("Vous avez choisi la soustraction.\n");
            printf("%ld - %ld = %ld", nbr1, nbr2, nbr1-nbr2);}break;
            case 3:  {printf("Vous avez choisi la multiplication.\n");
            printf("%ld *%ld = %ld", nbr1, nbr2, nbr1*nbr2);}break;
            case 4:  {printf("Vous avez choisi la division.\n");
            printf("%ld / %ld = %ld", nbr1, nbr2, nbr1/nbr2);}break;
            default: printf("Il y a un problème"); }
     
             system("PAUSE");
            return 0;
    }

Discussions similaires

  1. J'ai un problème avec Wascana, il exécute "scanf" avant "printf"
    Par Tiétio dans le forum Eclipse C & C++
    Réponses: 9
    Dernier message: 29/01/2009, 09h36
  2. Probleme avec scanf et printf imbriqués
    Par nozgarde dans le forum C
    Réponses: 8
    Dernier message: 11/04/2008, 11h24
  3. Les spécificateurs de format de printf et scanf
    Par Mokette dans le forum Bibliothèque standard
    Réponses: 5
    Dernier message: 11/01/2008, 15h58
  4. [debutant] pb avec scanf et printf
    Par Andrey dans le forum C
    Réponses: 12
    Dernier message: 17/11/2005, 17h15
  5. redéfinition de printf() et scanf()
    Par tut dans le forum C++
    Réponses: 3
    Dernier message: 06/09/2005, 17h18

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