Partage
  • Partager sur Facebook
  • Partager sur Twitter

La fonction retourne une variable...

Alors pk le main ne la connait il pas?

Sujet résolu
    31 mai 2007 à 9:10:53



    #include <stdio.h>
    #include <conio.h>

    int salut (void){
       
        int test = 5;
       
        return (test);
       
        }


    int main (void){
       
        salut();
       
        printf("Test = %d\n", test);
       
        getch();
        }




    La fonction salut retourne la valeur 5... ou est stoquée cette valeur?

    Si test est renvoyer a main, pourquoi n'est il pas connu?

    Comment remedier a ce probleme?
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      31 mai 2007 à 9:32:24

      Tu dois stocker toi-même cette valeur dans une variable, comme ceci par exemple:

      #include <stdio.h>
      #include <conio.h>

      int salut (void){
         
          int test = 5;
         
          return (test);
         
          }


      int main (void){
         
          int test = salut();
         
          printf("Test = %d\n", test);
         
          getch();
          }


      ou bien carrément utiliser le retour directement dans le printf :

      #include <stdio.h>
      #include <conio.h>

      int salut (void){
         
          int test = 5;
         
          return (test);
         
          }


      int main (void){
         
         
          printf("Test = %d\n", salut());
         
          getch();
          }
      • Partager sur Facebook
      • Partager sur Twitter
        31 mai 2007 à 9:34:40

        heu oui je viens de le voir dans un autre topic lol

        mais alors ma question est: comment renvoyer plusieurs valeurs?

        y a il moyen en utilisant des pointeurs ou autre chose?
        • Partager sur Facebook
        • Partager sur Twitter
          31 mai 2007 à 9:47:18

          Si tu veux renvoyer plusieur valeurs
          il ne faut plus faire un passage par valeur mais un passage par adresse ou par référence
          dc là oui tu passe un pointeur (pointeur sur une structure par exemple)
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            31 mai 2007 à 9:50:07

            Tu ne peux pas renvoyer plusieurs valeurs.

            Par contre, ce que tu peux faire, c'est soit passer par une structure/classe/un tableau que tu renvoies et qui contient toutes tes valeurs, soit effectivement passer par un pointeur/une référence.

            Euh... par contre je viens de voir que tu incluais stdio.h dans ton programme et que tu utilisais printf. Es-tu bien sûr de programmer en C++ là ?

            #include <iostream>
            #include <conio.h>

            int salut (void){
               
                int test = 5;
               
                return (test);
               
                }


            int main (void){
               
               
                std::cout << "Test = " << salut() << std::endl;
               
                getch();
                }


            Pour conio.h, je ne sais pas ce qu'il faut en faire en C++ par contre :euh:
            • Partager sur Facebook
            • Partager sur Twitter
              31 mai 2007 à 9:52:29

              non à ce niveau là, ça reste du C
              • Partager sur Facebook
              • Partager sur Twitter
                31 mai 2007 à 10:04:35

                ouais c'est du C mais parfois j'arrive pas a faire certains trucs comme fflush(stdin); si je met pas des librairies du C++...


                passer une structure ca va pas pcq la fonction devient alors





                testS salut (void){
                   
                   
                    typedef struct testS testS;
                    struct testS {
                           int test1;
                           int test2;
                            };
                   
                       
                    testS test;
                   
                   
                    test.test1 = 5;
                    test.test2 = 5;
                   
                    return (test);
                   
                    }



                mais testS n'est pas connu comme type puisque je le declare dans la fonction...

                il faut donc le declarer en globale comme ceci




                #include <stdio.h>
                #include <conio.h>
                #include "testing.h"


                typedef struct testS testS;
                    struct testS {
                           int test1;
                           int test2;
                            };


                testS salut (void){
                   
                    testS test;
                   
                   
                    test.test1 = 5;
                    test.test2 = 5;
                   
                    return (test);
                   
                    }



                int main (void){
                   
                   
                    test = salut();
                   
                    printf("Test1 = %d\nTest2 = %d\n", test.test1, test.test2);
                   
                    getch();
                    }




                ce qui revient au meme que de definir tout en global et justement c'est ce que je veux eviter...
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  31 mai 2007 à 10:07:16

                  Non, car là tu ne fais que définir une structure, pas déclarer une variable en global.
                  Sinon, en suivant cette logique, tu pourrais te reprocher de déclarer la fonction salut en global :p

                  Par contre, évite absolument fflush(stdin) !! Le comportement n'est pas défini.
                  Tu peux aller voir la FAQ de developpez.com pour voir comment vider proprement stdin.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    31 mai 2007 à 10:11:32

                    Oui si tu as suivi un minimum de cours tu auras appris qu'il faut à tout pris éviter de déclarer quoique ce soit en globale.

                    Là étant au boulot je me penche pas sérieusement sur ton programme, mais moi j'aurai fait directement.
                    j'aurai fait dans le main
                    - int test ;

                    en prototype j'aurai eu un void salut (int*)

                    et donc tu aurai eu dans le main comme appel de fonction
                    salut (&test)

                    et dans ta fonction test
                    salut (void){

                    void salut (&test)
                    {
                    test = 5;
                    }

                    désolé mon C est bien loin maintenant
                    mais ça te donne juste une idée
                    et ça t'évite un return

                    • Partager sur Facebook
                    • Partager sur Twitter
                      31 mai 2007 à 10:12:34

                      Ha ouuuaaaaiiissss! JUSTE!

                      donc je peux faire ca



                      #include <stdio.h>
                      #include <conio.h>

                      typedef struct testS testS;
                      struct testS {
                             int test1;
                             int test2;
                             };


                      testS salut (void){
                         
                             
                          testS test;
                         
                         
                          test.test1 = 5;
                          test.test2 = 5;
                         
                          return (test);
                         
                          }

                      int main (void){
                           
                             
                          testS testX;
                         
                          testX = salut();
                         
                          printf("Test1 = %d\nTest2 = %d\n", testX.test1, testX.test2);
                         
                          getch();
                          }




                      et mes variable sont pas globales...

                      genial!

                      Merci!!
                      • Partager sur Facebook
                      • Partager sur Twitter
                        31 mai 2007 à 10:13:48

                        pourquoi tu défini ta structure deux fois?
                        • Partager sur Facebook
                        • Partager sur Twitter
                          1 juin 2007 à 16:53:18

                          lol tu met du code source sans le tester! :lol:
                          c'est la melleur methode d'utiliser les structures
                          ou sinon stock toutes les valeurs dans un tableau

                          et tu renvoie le pointeur de ce tableau (mais je trouve que cette methode n'est pas tres "pratique")
                          • Partager sur Facebook
                          • Partager sur Twitter
                            3 juin 2007 à 17:32:29

                            Apres, en étant un peu plus violent que les autres, je te conseillerai tout de même d'oublier conio et les fflush et de commencer à suivre les cours de Mathéo, car ce que tu essaies de faire dans ton premier post est quand même la base de la base...
                            • Partager sur Facebook
                            • Partager sur Twitter

                            La fonction retourne une variable...

                            × 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