Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C] Les variables en C et leur type

Un peu en avance sur le cour mais j' ai de petit question

    26 novembre 2005 à 23:09:54

    Voila j' ai fais ce petit code qui fonctionne a merveille :


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

    int main(int argc, char *argv[])
    {
      int rep;
      printf("Petit Test\n");
      printf("1 = oui ; 2 = non\n");
      scanf("%i" , &rep );
     
          if ( rep == 1 )
          {
              printf("Oki c'est noter !! \n");
          }
          else if ( rep == 2 )
          {
              printf("une prochaine fois alors ... vous avez entrez le nombre : %d \n" , rep);
          }
          else
          {
               printf("attention on donne quelque chose de vrais\n");
          }

      system("PAUSE");     
      return 0;
    }


    Mais voila si a la place de faire 1 ou 2 on fais par exemple "a" le code affiche quand meme : une prochaine fois alors ... vous avez entrez le nombre : %d \n

    avec rep egale a 2 alors voila ma petite question :

    Dans un type int attendu si l' utilisateur envoie un autre type de valeur que prend comme valeur la variable ?
    • Partager sur Facebook
    • Partager sur Twitter
      26 novembre 2005 à 23:12:52

      Quand tu stockes un char, c'est son code ascii qui est stocké->un entier donc ;)
      • Partager sur Facebook
      • Partager sur Twitter
        26 novembre 2005 à 23:25:51

        Chais pas si la structure if, else if, else soit bien apprécié du compilo
        • Partager sur Facebook
        • Partager sur Twitter
          26 novembre 2005 à 23:26:50

          Si normalement y a pas de problème, mais son code est pas super bien organisé (chais plus comment on dit->décaller les lignes pou que ce soit plus clair...)
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            26 novembre 2005 à 23:47:53

            Citation : TheWall

            Dans un type int attendu si l' utilisateur envoie un autre type de valeur que prend comme valeur la variable ?


            La variable est inchangée. Utiliser scanf pour récupérer les entrées de l'utilisateur est en général une mauvaise idée ; utilise plutôt fgets avec stdin et converti le résultat obtenu manuellement après coup plutôt. Ce sera plus pratique contrairement à ce que tu crois. ;)
            • Partager sur Facebook
            • Partager sur Twitter
              26 novembre 2005 à 23:58:40

              Citation : rotoclap

              Chais pas si la structure if, else if, else soit bien apprécié du compilo


              Pourquoi ça ne serait pas bien apprécié du compilo ? o_O
              • Partager sur Facebook
              • Partager sur Twitter
                27 novembre 2005 à 0:36:54

                Je pense qu'une structure switch serait quand meme preferable, a savoir que dans cette structure, tu as une option default, qui te permet d'executer qque chose en cas d'eventualité non prévue.

                void main()
                {
                     int rep;
                     print("1 = oui ; 2 = non\n");
                     scanf("%d", rep);
                     switch(rep)
                     {
                          case 1: printf("Oki c'est noter !! \n");
                          break;
                          case 2: printf("une prochaine fois alors ... vous avez entrez le nombre : %d \n" , rep);
                          break;
                          default: printf("attention on donne quelque chose de vrais\n");
                          break;
                     }
                     getch();
                }
                • Partager sur Facebook
                • Partager sur Twitter
                  27 novembre 2005 à 1:31:20

                  au passage est incrementer
                  pour indenter proprement son code
                  • Partager sur Facebook
                  • Partager sur Twitter
                    27 novembre 2005 à 8:08:46

                    Akilla ton code fait une segfault tu as oublié le '&' dans scanf. Deuxio pour etre sur que scanf a récupéré un int tu fais :

                    /* arreteez avec void main() c'est dégeulasse */
                    int main()
                    {
                         int rep;
                         print("1 = oui ; 2 = non\n");
                         if(!scanf("%d", &rep)) /* si scanf ==0 alors aucune valeur n'a été reprise */
                         {
                            printf("Je vous ai demandé d'entrer un int !!");
                            system("PAUSE");
                            return -1 ; /* pour dire qu'on est pas content */
                         }
                         switch(rep)
                         {
                              case 1: printf("Oki c'est noter !! \n");
                              break;
                              case 2: printf("une prochaine fois alors ... vous avez entrez le nombre : %d \n" , rep);
                              break;
                              default: printf("attention on donne quelque chose de vrais\n");
                              break;
                         }
                         getch();
                    }
                    • Partager sur Facebook
                    • Partager sur Twitter
                      27 novembre 2005 à 9:14:19

                      Voila, moi je pensais plutot a switch, ca m'apparait beaucoup plus simple
                      • Partager sur Facebook
                      • Partager sur Twitter
                        27 novembre 2005 à 12:00:17

                        Citation : Seeme

                        Quand tu stockes un char, c'est son code ascii qui est stocké->un entier donc ;)



                        Oui mais le probleme c' est que c' est la meme chose pour toute les lettre , et a mon avis les code ascii de toute les lettres de l' alphabet non pas comme code : 2 !!

                        Sinon c' est vrais que switch est plus adapter ici ^^

                        Mais bon je suis content c' est le seul code que j' ai fais entierement sans en repomper le moindre caractere d' un autre code source et sans aucune erreur de compilation !!

                        Asmanur : dans ta structure : if(!scanf("%d", &rep)) , quelle est le role du "!" je crois comprendre mais je prefere etre sur pour eviter de vieux bug du a un truc pas trop sur ^^

                        Sinon merki pour toute vos reponces !!
                        • Partager sur Facebook
                        • Partager sur Twitter
                          27 novembre 2005 à 12:04:04

                          Asmanur est ce qui faudrait pas rajouter un return 0; dans ton code apres getchar() pour dire que cet fois tout c'est bien passe

                          EDIT : le ! c'est pour que la condition s'execute si le resultat est FALSE au lieu de TRUE, c'est comme en PHP
                          • Partager sur Facebook
                          • Partager sur Twitter
                            27 novembre 2005 à 12:05:46

                            hmm je ne suis pas sur mais scanf doit renvoyer 0 comme commenté si il n'a rien trouvé, et le ! sert à dire "différent de". La tu dis "hey, si scanf ma renvoyé quelquechose different de 1" (vu qu'il doit à mon avis renvoyer que 1, si il a réussit ou 0 si ya na pas marché) alors ...

                            EDIT:Sisi, si on veut bien faire il vaut mieu mettre un return 0 à la fin.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              27 novembre 2005 à 12:08:26

                              Garuma a raison '!' signifie NOT, en gros ca veut dire ==0
                              et oui j'aurais du rajouter return 0; mais j'avais la flemmme :-°
                              • Partager sur Facebook
                              • Partager sur Twitter
                                27 novembre 2005 à 14:17:06

                                Citation : asmanur

                                Akilla ton code fait une segfault tu as oublié le '&' dans scanf.



                                Mea Culpa... (Mon pseudo, c'est Akalia :p)

                                Citation : asmanur

                                /* arreteez avec void main() c'est dégeulasse */



                                Je suis désolé, on m' a appris à programmer comme ca, et sachant que tu retrouves ca dans des process industriels un peu plus poussé qu'une structure switch, je pense que ca doit pas etre si mal que ca.

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  27 novembre 2005 à 15:17:24

                                  Ben dans les process industriels, les machines se doivent être autonome, donc tu lances le programme qu'une fois et généralement sans paramètre à mettre dans le main()
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    27 novembre 2005 à 15:24:28

                                    Le break; après default: ne sert à rien.
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      27 novembre 2005 à 15:25:34

                                      Citation : DarkDominus

                                      Le break; après default: ne sert à rien.



                                      Mieux vaut quand même prendre l'habitude de le mettre ;)
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        27 novembre 2005 à 15:31:33

                                        Si c'est la même chose qu'en PHP ça ne sert à rien donc on ne le met pas (cf: les cours de PHP par M@teo).

                                        Et pourquoi faudrait-il prendre l'habitude de le mettre si ça ne sert à rien ?
                                        return 0; je peux comprendre mais ça...
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          27 novembre 2005 à 15:44:40

                                          C'est ma philosophie, je trouve ça plus clair.

                                          Et je vous en supplie:

                                          ARRETEZ DE COMPARER LE C ET PHP!
                                          </span></span>


                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            27 novembre 2005 à 15:45:40

                                            Je suis d'accord que ca sert à rien, si tu le mets, ca executera la suite du trairement, mais je prefere le mettre au cas ou. Question de charte de travail :p
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              27 novembre 2005 à 17:30:54

                                              Citation : TheWall

                                              Voila j' ai fais ce petit code qui fonctionne a merveille :


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

                                              int main(int argc, char *argv[])
                                              {
                                                int rep;
                                                printf("Petit Test\n");
                                                printf("1 = oui ; 2 = non\n");
                                                scanf("%i" , &rep );
                                               
                                                    if ( rep == 1 )
                                                    {
                                                        printf("Oki c'est noter !! \n");
                                                    }
                                                    else if ( rep == 2 )
                                                    {
                                                        printf("une prochaine fois alors ... vous avez entrez le nombre : %d \n" , rep);
                                                    }
                                                    else
                                                    {
                                                         printf("attention on donne quelque chose de vrais\n");
                                                    }

                                                system("PAUSE");     
                                                return 0;
                                              }



                                              Mais voila si a la place de faire 1 ou 2 on fais par exemple "a" le code affiche quand meme : une prochaine fois alors ... vous avez entrez le nombre : %d \n

                                              avec rep egale a 2 alors voila ma petite question :

                                              Dans un type int attendu si l' utilisateur envoie un autre type de valeur que prend comme valeur la variable ?


                                              chez moi ton code marche normalement si je met a ou ihdsqfdusqudgifqsiu il m'affiche ""attention on donne quelque chose de vrais"" !
                                              esqu'on pourait m'expliquer ceque veux dire %i dans cette ligne scanf("%i" , &rep ); ? int ? et pourquoi met-il %d ?
                                              merci d'avance :d.
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                27 novembre 2005 à 17:33:57

                                                c'est la même chose, %i ou %d c'est pour un entier signé
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  28 novembre 2005 à 7:15:10

                                                  Bon je me dois de vous faire un petit TOPO sur scanf parce que là sinon on en a pour des jours :
                                                  1/ scanf c'est fscanf(stdin,...
                                                  2/ A chaque scanf correspond une et une seule enrtée clavie (terminée par unrtée ou par un espace)
                                                  3/scanf retourne le nombre de valeur lues (0 si aucune valeur n'a pu etre lu : exemple si on entre une string à la place d'un nombre)
                                                  4/ Enfin si la valeur n'a pas pu etre lu la valeur de la variable passé 'est pas modifiée.
                                                  Autre chose qui est très importante en C/C++,
                                                  Le compilo supose que vous savez ce que vous faites

                                                  C'est à dire qu'il n'initialise pas vos variables, ne vérifie pas les adresses déférencées,...

                                                  donc il ne faut pas mettre
                                                  int rep;

                                                  mais int rep = 0;
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter

                                                  [C] Les variables en C et leur type

                                                  × 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