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 avec scanf()


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 10
    Par défaut Problème avec scanf()
    Bonjour,

    s'il vous plaît j'ai un problème avec un code que j'essaye d'écrire. Le but de ce code est le suivant : on lui écrit une date par exemple 07 12 2016 et il répond par : le 7 Décembre 2016. Le problème c'est que quand j'initialise la variable langue par 1 ou par 2 ça fonctionne très bien, mais quand je veux demander à l'utilisateur de choisir la langue (Français ou Anglais) en utilisant scanf() ça ,ne fonctionne 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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
     
    #include <string.h>
    #include <stdio.h>
    #include <stdlib.h>
    #define TAILLE_MAX 100
     
    int main()
    {
        //=========On initialise deux tableaux de mois en francais et en anglais============
        char MFRAN[12][20]={"Janvier","Fevrier","Mars","Avril","Mai","Juin","Juillet","Aout","Septembre","Octobre","Novembre","Decembre"};
        char MENG[12][20]={"Junuary","February","March","April","May","June","July","August","September","October","November","December"};
     
        printf("Choisissez une langue\n1-Francais\n2-Anglais\n");
     
        int langue=2;   /* C'est ici que j'ai le problème, si je demande à l'utilisateur de choisir la langue avec scanf()
         ça fonctionne pas, pour l'instant si on veut le francais on initialise langue par 1 si on veut anglais on l'initialise
         par 2*/
     
        if(langue == 1){
               char date[TAILLE_MAX]={0};
               printf("Entrez une date comme l'exemple suivant : 09 04 1996\n");
               scanf("%[^\n]",date);            //J'utilise le [^\n] pour pouvoir stocker l'éspace
               char mois[2],Mois=0;
               int moisInt=0,MoisInt=0,test=0;
               //=====J'effectue un teste si le mois s'écrit 02 par exemple  ou bien 11========
               if (date[3]!='0')
               {
                   mois[0]=date[3];
                   mois[1]=date[4];
                   moisInt = atoi(mois);
                   test=1;
     
               }
               else if (date[3]=='0')
               {
                   Mois=date[4];
                   MoisInt=atoi(&Mois);
                   test=2;
     
               }
               if (test==1)
                printf("Le %c%c %s %c%c%c%c:\n",date[0],date[1],MFRAN[moisInt-1],date[6],date[7],date[8],date[9]);
               if (test==2)
                printf("Le %c %s %c%c%c%c:\n",date[1],MFRAN[MoisInt-1],date[6],date[7],date[8],date[9]);
        }
     
        if (langue == 2){
            char date[TAILLE_MAX]={0};
               printf("Enter a date, for example: 09 04 1996\n");
               scanf("%[^\n]",date);
               char mois[2],Mois=0;
               int moisInt=0,MoisInt=0;
               int test1=0,test2=0,test3=0;
               //=====J'effectue un teste si le mois s'écrit 02 par exemple  ou bien 11========
               if (date[3]!='0')
               {
                   mois[0]=date[3];
                   mois[1]=date[4];
                   moisInt = atoi(mois);
                   test1=1;
     
               }
               else if (date[3]=='0')
               {
                   Mois=date[4];
                   MoisInt=atoi(&Mois);
                   test1=2;
               }
    //=======Je teste si le jour est entre 1 et 4 pour savoir si je dois écrire 'st' ou bient 'nd' ou bien 'rd' ou bien 'th'=========
                if(date[1]=='1')
                    test3=1;
                else if (date[1]=='2')
                    test3=2;
                else if (date[1]=='3')
                    test3=3;
                else if(date[1]=='4')
                    test3=4;
     
               if (date[0]=='0')
                    test2=2;
               else if(date[0]!='0')
                    test2=1;
               if (test1==1)
               {
                   if (test2==1) /*Ce test a pour but de voir si on a le jour écrit par exemple 01 ou bien 11 pour que si c'est écrit
                                    on enlève le 0*/
                    printf(" %s %c%cth %c%c%c%c:\n",MENG[moisInt-1],date[0],date[1],date[6],date[7],date[8],date[9]);
                   else if(test2==2)
                    printf(" %s %c %c%c%c%c:\n",MENG[moisInt-1],date[1],date[6],date[7],date[8],date[9]);
               }
               if (test1==2){
                    if(test2==1)
                        printf(" %s %c%cth %c%c%c%c:\n",MENG[MoisInt-1],date[0],date[1],date[6],date[7],date[8],date[9]);
                        //======Le switch pour voir ce qu'on va écrire à côté du jour ('st' ou'nd ou'rd' ou 'th')=======
                    else if(test2==2)
                    {
                        switch(test3){
                        case 1:printf(" %s %cst %c%c%c%c:\n",MENG[MoisInt-1],date[1],date[6],date[7],date[8],date[9]);break;
                        case 2:printf(" %s %cnd %c%c%c%c:\n",MENG[MoisInt-1],date[1],date[6],date[7],date[8],date[9]);break;
                        case 3:printf(" %s %crd %c%c%c%c:\n",MENG[MoisInt-1],date[1],date[6],date[7],date[8],date[9]);break;
                    }
                    }
        }
        }
        return 0;
    }

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 17
    Par défaut
    Le problème semble venir de ton scanf qui lit la date entrée par l'utilisateur :
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    scanf("%[^\n]",date);

    si tu ajoutes un printf pour afficher ta variable date juste après ce scanf, tu verras le problème.
    Peut être que la fonction strsplit pourrait t'aider dans ce cas.

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 10
    Par défaut
    Je n'ai jamais utilisé cette fonction dont vous avez parlé. Est ce qu'il est possible que vous me donner un exemple d'utilisation

  4. #4
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Il semblerait qu'il te manque le code pour choisir la langue. Est-ce que tu l'as fait ou tu cherches à le faire?

    Parce que dans le code que tu montres, il semblerait qu'il te manque la partie où tu demandes à l'utilisateur une langue.

    Remarque générale: scanf est remplie de soucis, il vaut mieux ne pas s'en servir ;-)

    Petite remarque: c'est January ;-)

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 17
    Par défaut
    Citation Envoyé par fearyourself Voir le message

    Remarque générale: scanf est remplie de soucis, il vaut mieux ne pas s'en servir ;-)
    Exact, d'ailleurs je te conseille d'utiliser la fonction read() à la place, ou bien scanf(). Par exemple dans ton cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    char langue[2];
    ...
    read(STDIN_FILENO, langue, 2);
    ...
    fgets(date, TAILLE_MAX, stdin);
    langue étant un char*, il te suffira d'utiliser la fonction atoi() pour convertir la valeur en int et ainsi effectuer la comparaison.

  6. #6
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 10
    Par défaut
    Oui effectivement fearyourself c'est le code pour choisir la langue qui me créait le problème.
    merci pour la remarque

  7. #7
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 10
    Par défaut
    Merci beaucoup personne.c votre solution a bien fonctionné.

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

Discussions similaires

  1. Problème avec "SCANF"
    Par condor666 dans le forum Débuter
    Réponses: 2
    Dernier message: 28/03/2008, 11h20
  2. Problème avec scanf("%s",str)
    Par mathieumadrid dans le forum C
    Réponses: 4
    Dernier message: 18/12/2006, 16h47
  3. problème avec scanf
    Par mimina dans le forum C
    Réponses: 27
    Dernier message: 13/11/2006, 19h30
  4. problème avec scanf
    Par thierry_b dans le forum C
    Réponses: 10
    Dernier message: 21/12/2005, 20h10
  5. problème avec scanf
    Par troumad dans le forum C
    Réponses: 30
    Dernier message: 20/11/2005, 15h21

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