Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème d'alignement de variable printf et scanf!

    2 décembre 2005 à 17:04:06

    Bonjour!j'aurais besoin d'aide...Comment faire pour que trois variable scanf et 2 variable printf soit aligné?

    je veux demander à quelqu'un sa date de naissance:


      long jour = 0;
      scanf("%d", &jour);
      printf("/");
      long mois = 0;
      scanf("%d", &mois);
      printf("/");
      long annee = 0;
      scanf("%d", &annee);


    tout marche parfaitement! mais le code en question donne,à la fin, ceci:

    JJ
    /MM
    /AAAA

    alors que je voudrais qu'il affiche:

    JJ/MM/AAAA!

    Comment faire pour que la variable scanf n'aille pas à la ligne???!!!


    MERCI D'AVANCE!
    • Partager sur Facebook
    • Partager sur Twitter
      2 décembre 2005 à 17:18:13

      #include <stdio.h>
      #include <stdlib.h>

      int main(int argc, char *argv[])
      {
        long jour = 0;
        long mois = 0;
        long annee = 0;

       printf("Jours ? ");
        scanf("%d", &jour);
       printf("Mois ? ");
        scanf("%d", &mois);
       printf("Annee ?");
        scanf("%d", &annee);
       printf ("\n %d / %d / %d \n\n", jour, mois, annee);

        system("PAUSE");     
        return 0;
      }
      • Partager sur Facebook
      • Partager sur Twitter
        2 décembre 2005 à 17:28:09


        int main(void)
        {
          int j, m, a;
          scanf("%i/%i/%i", &j, &m, &a);
          printf("%i %i %i\n", j, m, a);
          system("pause");
          return 0;
        }


        (attention ce code n'est pas protégé si l'utilisateur tape n'importe quoi)*

        Je te conseille trés fortement de consulter le man de printf/scanf pour voir comment fonctionne le formatage.
        • Partager sur Facebook
        • Partager sur Twitter
          2 décembre 2005 à 17:39:05

          Ah, merci beaucoup...mais il y a 1 erreur à la ligne:

          long jour = 0; !!!
          • Partager sur Facebook
          • Partager sur Twitter
            2 décembre 2005 à 17:46:06

            Ce n'est pas suffisant pour voir l'erreur la...

            De plus tu n'as pas besoin d'un type aussi gros que long pour une variable qui varie entre 0 et 31
            • Partager sur Facebook
            • Partager sur Twitter
              2 décembre 2005 à 17:46:15


              //
              //TODO: déclaration et inclusion de tout ce dont on a besoin (un
              // typedef pour BOOL, les constantes TRUE et FALSE, les includes
              // pour printf / sscanf et tout le bazar,... )
              //
              // [...]
              //
              BOOL lireDate(const char* tampon, long* jour, long* mois, long* annee)
              {
                long tmpJour, tmpMois, tmpAn ;
                if ( sscanf(tampon, "%ld/%ld/%ld", &tmpJour, &tmpMois, &tmpAn) != 3 )
                {
                  fprintf(stderr, "La date entree n'est pas correcte !\r\n") ;
                  return FALSE ;
                }
                else
                {
                  *jour  = tmpJour ;
                  *mois  = tmpMois ;
                  *annee = tmpAn   ;
                  return TRUE ;
                }
              }
              //
              // [...]
              //
              do
              {
                printf("Entrez la date :\r\n") ;
                //TODO: récupérer une ligne entrée par l'utilisateur dans tampon
              }
              while( lireDate(tampon, &jour, &mois, &annee) ) ;
              printf("La date entree est : %02d/%02d/%04d\r\n", jour, mois, annee) ;
              //
              // [...]
              //
              • Partager sur Facebook
              • Partager sur Twitter
                2 décembre 2005 à 17:50:13

                je suis pas sur d'avoir tout compris à ce code mais je vais voir si ça marche...

                lol ca ne marche pas dé la première ligne...
                • Partager sur Facebook
                • Partager sur Twitter
                  2 décembre 2005 à 18:11:42

                  Qq remarques :
                  Il ne me semble par nécessaire d'utiliser des longs pour ce genre de données. Néanmoins si c'est le cas alors il faut utiliser le format %ld.

                  De plus BOOL n'existe pas en C

                  (aussi il manque 2 & dans le scanf)

                  edit : Ha oui. Je corrige
                  • Partager sur Facebook
                  • Partager sur Twitter
                    2 décembre 2005 à 18:14:12

                    je vais voir ton premier code The Dooft merci^^
                    • Partager sur Facebook
                    • Partager sur Twitter
                      2 décembre 2005 à 18:19:26

                      Le code de Mackila rajoute une protection : si l'utilisateur se trompe, ca va lui redemander de taper.

                      L'idée de base c'est que scanf retourne le nombre de variable remplies correctement (rtfm). Dans notre cas, si les 3 variables sont bien remplies, alors scanf va retourner 3. En revanche si scanf ne retourne pas 3, c'est qu'il y a eu un probleme. Alors on peut redemander a rerentrer la phrase.

                      (l'inconvenient a ce systeme c'est qu'il n'y a pas de possibilité d'en sortir).
                      • Partager sur Facebook
                      • Partager sur Twitter
                        2 décembre 2005 à 18:24:04

                        Citation : The Dooft

                        [...]

                        (l'inconvenient a ce systeme c'est qu'il n'y a pas de possibilité d'en sortir).



                        ?
                        • Partager sur Facebook
                        • Partager sur Twitter
                          2 décembre 2005 à 18:27:33

                          ok bon reste plus qu'à trouver l'erreur qu'il y a là-dedans:
                          long jour, mois, annee = 0;
                          scanf("%d/%d/%d", &jour, &mois, &annee);
                          printf("%d %d %d\n", jour, mois, annee);
                          printf("Bien voyons maintenant si vous nous avez menti... vous avez %d ans et vous etes ne le %d du %d de l'annee %d!",age , jour , mois , annee\n);
                          system("PAUSE");


                          à l'avant dernière ligne! ps: j'ai remis long car l'anné c'est + que 125 (si je me souvient le int s'arrête la)et j'ai changé les abréviation!
                          • Partager sur Facebook
                          • Partager sur Twitter
                            2 décembre 2005 à 18:28:56

                            Citation : Mackila

                            Citation : The Dooft

                            [...]

                            (l'inconvenient a ce systeme c'est qu'il n'y a pas de possibilité d'en sortir).



                            ?



                            Dans cet exemple de programme c'est sur que l'on s'en fiche ^^
                            • Partager sur Facebook
                            • Partager sur Twitter
                              2 décembre 2005 à 18:30:53

                              lol oui mais je trouve pas l'erreur :'(
                              • Partager sur Facebook
                              • Partager sur Twitter
                                2 décembre 2005 à 18:36:49

                                Commence par utiliser la balise code pour poster, et par lire le message d'erreur que te pond le compilateur.

                                Question subsidiaire : A quoi sert \n à la fin d'une chaine ?
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  2 décembre 2005 à 18:40:15

                                  pour que entre le AAAA et le bien il y est 1 saut de ligne!

                                  sinon quel balise code?
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    2 décembre 2005 à 18:55:09

                                    Ceci n'est pas tres lisible :


                                    int main(int argc, char* argv[])
                                    {
                                    //TODO: le programme complet
                                    return 0 ;
                                    }




                                    Si tu tape cela :

                                    <code type="cpp">int main(int argc, char* argv[])
                                    {
                                      //TODO: le programme complet
                                      return 0 ;
                                    }</code >


                                    alors le forum affiche :

                                    int main(int argc, char* argv[])
                                    {
                                      //TODO: le programme complet
                                      return 0 ;
                                    }
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      2 décembre 2005 à 19:01:30

                                      pas tout compris...en fait ya pas 1 truc pour qu'il y est pas de saut de ligne?se serait déjà fini si quelqu'un savait...enfin dites si sa existe d'ailleur si sa se trouve sa n'existe pas!
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        2 décembre 2005 à 19:25:21

                                        Citation : max 2000

                                        ok bon reste plus qu'à trouver l'erreur qu'il y a là-dedans:
                                        long jour, mois, annee = 0;
                                        scanf("%d/%d/%d", &jour, &mois, &annee);
                                        printf("%d %d %d\n", jour, mois, annee);
                                        printf("Bien voyons maintenant si vous nous avez menti... vous avez %d ans et vous etes ne le %d du %d de l'annee %d!",age , jour , mois , annee\n);
                                        system("PAUSE");


                                        à l'avant dernière ligne! ps: j'ai remis long car l'anné c'est + que 125 (si je me souvient le int s'arrête la)et j'ai changé les abréviation!



                                        Vous avez oublié de déclarer la variable age, ainsi que de faire le calcul qui défini l'âge. :)
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          2 décembre 2005 à 19:32:24

                                          j'ai pas donné tout mon code^^ l'age est déclarer!le calcul qui définis l'age...a partir de la date de naissance?

                                          #include <stdio.h>
                                          #include <stdlib.h>

                                          int main(int argc, char *argv[])
                                          {
                                            long vies = 0;
                                            printf ("Combien souhaitez-vous de vie?\n\n")
                                            scanf("%d", &vies);
                                            printf ("\nTres bien vous voulez donc %d vies!\n", vies);
                                            long niveaux = 0;
                                            printf("Maintenant  combien de niveaux voulez-vous jouer?\n\n");
                                            scanf("%d", &niveaux);
                                            printf("Tres bien vous voulez egalement jouer a %d niveaux!\n", niveaux);
                                            printf("Bien il ne nous reste plus qu'a recapituler tout ce que vous avez dit:\n Vous voulez %d vies et jouer a %d niveaux!\nC'est bien ca?Avouez que je suis plutot fort!\n\n", vies, niveaux);
                                            long age = 0;
                                            printf("Quoi???Vous partez deja???mais ce n'est pas fini!c'est loin d'etre fini!Je dois d'abbord découvrir votre age!Machiavelique mais obligatoire!Passons au test!\n");
                                            printf("Entrez votre age!\n");
                                            scanf("%d", &age);
                                            printf("AHAHAHAHAH!!!vous ne vous en sortirez pas  comme ca!je ne vous fait nullement\n confiance!Entrez votre date de naissance!allez!hop!plus vite que ça!");
                                            long jour, mois, annee = 0;
                                            scanf("%d/%d/%d", &jour, &mois, &annee);
                                            printf("%d %d %d\n", jour, mois, annee);
                                            printf("Bien voyons maintenant si vous nous avez menti... vous avez %d ans et vous etes ne le %d du %d de l'annee %d!",age , jour , mois , annee\n);
                                            system("PAUSE");
                                            return 0;
                                          }


                                          Si quelqu'un peut simplement me donner le code SANS l'erreur se serait gentil!




                                          Pour voir si l'âge correspond à la date de naissance je ne sais pas comment on fait les opérations donc dans le prochain chapitre ce petit code sera complet!Sauf si on me l'explique avant!
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            2 décembre 2005 à 19:46:18

                                            Lis ce que te dis le compilateur. Il te donne un numéro de ligne avec erreur. Regarde cette ligne plus en détail.
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              2 décembre 2005 à 19:55:02

                                              #include <stdio.h>
                                              #include <stdlib.h>

                                              int main(int argc, char *argv[])
                                              {
                                                long vies = 0;
                                                printf ("Combien souhaitez-vous de vie?\n\n")
                                                scanf("%d", &vies);
                                                printf ("\nTres bien vous voulez donc %d vies!\n", vies);
                                                long niveaux = 0;
                                                printf("Maintenant  combien de niveaux voulez-vous jouer?\n\n");
                                                scanf("%d", &niveaux);
                                                printf("Tres bien vous voulez egalement jouer a %d niveaux!\n", niveaux);
                                                printf("Bien il ne nous reste plus qu'a recapituler tout ce que vous avez dit:\n Vous voulez %d vies et jouer a %d niveaux!\nC'est bien ca?Avouez que je suis plutot fort!\n\n", vies, niveaux);
                                                long age = 0;
                                                printf("Quoi???Vous partez deja???mais ce n'est pas fini!c'est loin d'etre fini!Je dois d'abbord découvrir votre age!Machiavelique mais obligatoire!Passons au test!\n");
                                                printf("Entrez votre age!\n");
                                                scanf("%d", &age);
                                                printf("AHAHAHAHAH!!!vous ne vous en sortirez pas  comme ca!je ne vous fait nullement\n confiance!Entrez votre date de naissance!allez!hop!plus vite que ça!");
                                                long jour, mois, annee = 0;
                                                scanf("%d/%d/%d", &jour, &mois, &annee);
                                                printf("%d %d %d\n", jour, mois, annee);
                                                printf("Bien voyons maintenant si vous nous avez menti... vous avez %d ans et vous etes ne le %d du %d de l'annee %d!",age , jour , mois , annee\n);
                                                system("PAUSE");
                                                return 0;
                                              }


                                              printf("Bien voyons maintenant si vous nous avez menti... vous avez %d ans et vous etes ne le %d du %d de l'annee %d!",age , jour , mois , annee\n); Le "\n" est de trop.

                                              Voilà le code sans l'erreur :):

                                              #include <stdio.h>
                                              #include <stdlib.h>

                                              int main(int argc, char *argv[])
                                              {
                                                long vies = 0;
                                                printf ("Combien souhaitez-vous de vie?\n\n")
                                                scanf("%d", &vies);
                                                printf ("\nTres bien vous voulez donc %d vies!\n", vies);
                                                long niveaux = 0;
                                                printf("Maintenant  combien de niveaux voulez-vous jouer?\n\n");
                                                scanf("%d", &niveaux);
                                                printf("Tres bien vous voulez egalement jouer a %d niveaux!\n", niveaux);
                                                printf("Bien il ne nous reste plus qu'a recapituler tout ce que vous avez dit:\n Vous voulez %d vies et jouer a %d niveaux!\nC'est bien ca?Avouez que je suis plutot fort!\n\n", vies, niveaux);
                                                long age = 0;
                                                printf("Quoi???Vous partez deja???mais ce n'est pas fini!c'est loin d'etre fini!Je dois d'abbord découvrir votre age!Machiavelique mais obligatoire!Passons au test!\n");
                                                printf("Entrez votre age!\n");
                                                scanf("%d", &age);
                                                printf("AHAHAHAHAH!!!vous ne vous en sortirez pas  comme ca!je ne vous fait nullement\n confiance!Entrez votre date de naissance!allez!hop!plus vite que ça!");
                                                long jour, mois, annee = 0;
                                                scanf("%d/%d/%d", &jour, &mois, &annee);
                                                printf("%d %d %d\n", jour, mois, annee);
                                                printf("Bien voyons maintenant si vous nous avez menti... vous avez %d ans et vous etes ne le %d du %d de l'annee %d!",age , jour , mois , annee);
                                                system("PAUSE");
                                                return 0;
                                              }
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                31 décembre 2005 à 12:56:13

                                                DATE de naissance

                                                #include <stdio.h>
                                                #include <stdlib.h>

                                                int main(int argc, char *argv[])
                                                {
                                                long jour, mois, annee;

                                                jour =0;
                                                mois = 0;
                                                annee = 0;

                                                printf("tapez le chiffre du jour de votre naissance : \n\n\a");
                                                scanf("%ld", &jour);
                                                printf("Maintenant tapez le chiffre du mois de naissance : \n\n");
                                                scanf("%ld", &mois);
                                                printf("Ensuite l annee de votre naissance : \n\n");
                                                scanf("%ld", &annee);

                                                printf("Vous etes donc ne le : %ld / %ld / %ld\n\n", jour,mois,annee);
                                                system("PAUSE");
                                                return 0;
                                                }
                                                Mais comment peut t on faire si on voudrais recuperer le mois de la date de naissance en lettre, par ex: 'aout'
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  31 décembre 2005 à 14:22:27

                                                  et bah...c'est long a faire mais bon ... tu peux faire ca:


                                                  #include <stdio.h>
                                                  #include <stdlib.h>

                                                  int main(int argc, char *argv[])
                                                  {
                                                  long jour, mois, annee;

                                                  jour =0;
                                                  mois = 0;
                                                  annee = 0;

                                                  printf("tapez le chiffre du jour de votre naissance : \n\n\a");
                                                  scanf("%ld", &jour);
                                                  printf("Maintenant tapez le chiffre du mois de naissance : \n\n");
                                                  scanf("%ld", &mois);
                                                  printf("Ensuite l annee de votre naissance : \n\n");
                                                  scanf("%ld", &annee);
                                                  if(mois==1)
                                                  {
                                                  printf("Vous etes donc ne le : %ld Janvier %ld\n\n", jour,annee);
                                                  system("PAUSE");
                                                  }
                                                  else if(mois==2)
                                                  {
                                                  printf("Vous etes donc ne le : %ld Février %ld\n\n", jour,annee);
                                                  system("PAUSE");
                                                  }
                                                  else if(mois==3)
                                                  {
                                                  printf("Vous etes donc ne le : %ld Mars %ld\n\n", jour,annee);
                                                  system("PAUSE");
                                                  }
                                                  else if(mois==4)
                                                  {
                                                  printf("Vous etes donc ne le : %ld Avril %ld\n\n", jour,annee);
                                                  system("PAUSE");
                                                  }
                                                  else if(mois==5)
                                                  {
                                                  printf("Vous etes donc ne le : %ld Mai %ld\n\n", jour,annee);
                                                  system("PAUSE");
                                                  }
                                                  else if(mois==6)
                                                  {
                                                  printf("Vous etes donc ne le : %ld Juin %ld\n\n", jour,annee);
                                                  system("PAUSE");
                                                  }
                                                  else if(mois==7)
                                                  {
                                                  printf("Vous etes donc ne le : %ld Juillet %ld\n\n", jour,annee);
                                                  system("PAUSE");
                                                  }
                                                  else if(mois==8)
                                                  {
                                                  printf("Vous etes donc ne le : %ld Aout %ld\n\n", jour,annee);
                                                  system("PAUSE");
                                                  }
                                                  else if(mois==9)
                                                  {
                                                  printf("Vous etes donc ne le : %ld Septembre %ld\n\n", jour,annee);
                                                  system("PAUSE");
                                                  }
                                                  else if(mois==10)
                                                  {
                                                  printf("Vous etes donc ne le : %ld Octobre %ld\n\n", jour,annee);
                                                  system("PAUSE");
                                                  }
                                                  else if(mois==11)
                                                  {
                                                  printf("Vous etes donc ne le : %ld Novembre %ld\n\n", jour,annee);
                                                  system("PAUSE");
                                                  }
                                                  else if(mois==12)
                                                  {
                                                  printf("Vous etes donc ne le : %ld Decembre %ld\n\n", jour,annee);
                                                  system("PAUSE");
                                                  }
                                                  else
                                                  {
                                                  printf("Vous avez du faire 1 erreur quelque part...\n\n");
                                                  system("PAUSE");
                                                  }
                                                  return 0;
                                                  }




                                                  Tu peux aussi faire switch...
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    31 décembre 2005 à 15:49:57

                                                    Oui c'est ca, j'ai compris...
                                                    Moi j'avais trouvé

                                                    #include <stdio.h>
                                                    #include <stdlib.h>

                                                    int main(int argc, char *argv[])
                                                    {
                                                    long jour, mois, annee;

                                                    jour =0;
                                                    mois = 0;
                                                    annee = 0;

                                                    printf("tapez le chiffre du jour de votre naissance : \n\n");
                                                    scanf("%ld", &jour);
                                                    printf("Maintenant tapez le chiffre du mois de naissance : \n\n");
                                                    scanf("%ld", &mois);

                                                    if (mois == 1)
                                                    {
                                                    printf(" Mois de JANVIER\n\n");
                                                    }
                                                    else if (mois == 2)
                                                    {
                                                    printf(" Mois de FEVRIER\n\n");
                                                    }
                                                    else if(mois == 3)
                                                    {
                                                    printf(" Mois de MARS\n\n");
                                                    }
                                                    else if(mois == 4)
                                                    {
                                                    printf(" Mois d AVRIL\n\n");
                                                    }
                                                    else if(mois == 5)
                                                    {
                                                    printf(" Mois MAI\n\n");
                                                    }
                                                    else if(mois == 6)
                                                    {
                                                    printf(" Mois de JUIN\n\n");
                                                    }
                                                    else if(mois == 7)
                                                    {
                                                    printf(" Mois de JUILLET\n\n");
                                                    }
                                                    else if(mois == 8)
                                                    {
                                                    printf(" Mois d AOUT\n\n");
                                                    }
                                                    else if(mois == 9)
                                                    {
                                                    printf(" Mois de SEPTEMBRE\n\n");
                                                    }
                                                    else if(mois == 10)
                                                    {
                                                    printf(" Mois de OCTOBRE\n\n");
                                                    }
                                                    else if(mois == 11)
                                                    {
                                                    printf(" Mois de NOVEMBRE\n\n");
                                                    }
                                                    else if(mois == 12)
                                                    {
                                                    printf(" Mois de DECEMBRE\n\n");
                                                    }
                                                    else
                                                    {
                                                    printf(" MOIS INCONNU\n\n\n");
                                                    }


                                                    printf("Ensuite l annee de votre naissance : \n\n");
                                                    scanf("%ld", &annee);

                                                    printf("Vous etes donc ne le : %ld / %ld / %ld\n\n\n", jour,mois,annee);

                                                    le tien est plus complet
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      31 décembre 2005 à 16:24:21

                                                      Oui mais bon fait-le comme tu le sens!tu peux calculer les anné bissextile!
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter

                                                      Problème d'alignement de variable printf et scanf!

                                                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                      • Editeur
                                                      • Markdown