3 votes

C++ Comment utiliser des variables d'une fonction à une autre ?

Pour information, je suis complètement novice en C++ et en tout autre langage de programmation, donc si c'est possible, je serais heureux que vous puissiez me répondre d'une manière que je puisse comprendre :)

J'ai travaillé récemment sur un jeu simple de pierre, papier, ciseaux dans lequel j'ai 3 fonctions de base, une pour l'utilisateur, une pour le robot, et une qui choisit qui gagne le jeu.

Je sais qu'en utilisant system("cls") n'est pas la meilleure solution, mais je n'ai pas l'intention de l'utiliser en dehors de Windows.

La fonction finale results() doivent utiliser les variables x y brand des deux fonctions précédentes, mais je n'arrive pas à trouver un moyen de le faire. Et lorsque les gens l'expliquent ailleurs, ils le font de manière trop avancée pour moi. N'oubliez pas que je n'ai pas besoin de les modifier, je dois simplement les comparer pour déterminer le gagnant.

Je vais vous montrer mon code ici pour que vous puissiez voir à quoi vous avez affaire. N'hésitez pas à me faire part de vos commentaires sur d'autres points à améliorer.

#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <windows.h>

using namespace std;
int bgame(), ugame(), results();
int main()
{
    srand(time(NULL));
    cout<<"Welcome to RPS!\n" <<"You know what to do.\n" <<"\n[ENTER]";
    cin.ignore();
    system("cls");
    ugame();

    return 0;
}

int ugame()
{
    int x;
    cout<<"Type a number from 1-3: ";
    cin>> x;
    cin.ignore();

    if ( x == 1 )
    {
        cout<<"\nYou chose rock!\n" <<"\n[ENTER]";
        cin.ignore();
        bgame();
    }
    else if ( x == 2)
    {
        cout<<"\nYou chose paper!\n" <<"\n[ENTER]";
        cin.ignore();
        bgame();
    }
    else if ( x == 3 )
    {
        cout<<"\nYou chose scissors!\n" <<"\n[ENTER]";
        cin.ignore();
        bgame();
    }
    else
    {
        cout<<"\nTry again.\n" <<"\n[ENTER]";
        cin.ignore();
        ugame();
        system("cls");
    }
    return 0;
}

int bgame()
{
    int brand = rand()>>4;

    system("cls");
    cout<<"The bot will now choose an item.\n" <<"\n" <<"[ENTER]\n";
    cin.ignore();
    brand = rand() % 3 + 1;

    if ( brand == 1)
    {
        cout<<"\nBot chose rock!";
        cin.ignore();
        results();
    }
    else if ( brand == 2 )
    {
        cout<<"\nBot chose paper!";
        cin.ignore();
        results();
    }
    else if ( brand == 3 )
    {
        cout<<"\nBot chose scissors!";
        cin.ignore();
        results();
    }
    else
    {
        cout<<"\nError.";
        cin.ignore();
        bgame();
        system("cls");
    }
    return 0;
}

int results()
{

}

9voto

Shar Points 445

Vous pouvez envoyer des "paramètres" à une fonction. Cela crée une copie de votre variable et vous pouvez l'utiliser dans une autre fonction.

Vous devez le spécifier avec le nom de votre fonction (qui est nommée prototype) comme ceci :

int results(int x, int brand)

Vous mettez un nom de type et un nom de variable. Par exemple, cette fonction prendra 2 int comme paramètres.

int results(int x, int brand)
{
   // do something with your variables
}

Et lorsque vous appelez la fonction, vous tapez :

results(x, brand);

Si vous le souhaitez, ce lien l'explique avec des images, des exemples et plus de détails : http://www.cplusplus.com/doc/tutorial/functions/

1voto

Flaëndil Points 118

Tout d'abord, apprenez comment utiliser des fonctions avec des paramètres.

Après cela, vous devriez pouvoir faire ce que vous voulez.

Comme suggéré, il suffit de faire quelque chose comme ceci :

déclaration :

int bgame(int x){
    ... what bgame do ...
}

et dans ugame :

int ugame(){
    int x;
    ...
    cin >> x;
    ...
    bgame(x);
}

J'espère que cela vous aidera.

1voto

Thanushan Points 552

Utiliser des paramètres, passer par la valeur. Avoir des paramètres dans l'en-tête de la fonction, afin de pouvoir passer la valeur dans la fonction.

using namespace std;
int bgame(int x_p), ugame(), results(int x_p, int brand_p);
int main()

{
    srand(time(NULL));
    cout<<"Welcome to RPS!\n" <<"You know what to do.\n" <<"\n[ENTER]";
    cin.ignore();
    system("cls");
    ugame();

    return 0;
}

int ugame()
{
    int x;

    cout<<"Type a number from 1-3: ";
    cin>> x;
    cin.ignore();

    if ( x == 1 )
    {
        cout<<"\nYou chose rock!\n" <<"\n[ENTER]";
        cin.ignore();
        bgame(x);
    }
        else if ( x == 2)
    {
        cout<<"\nYou chose paper!\n" <<"\n[ENTER]";
        cin.ignore();
        bgame(x);
    }
        else if ( x == 3 )
    {
        cout<<"\nYou chose scissors!\n" <<"\n[ENTER]";
        cin.ignore();
        bgame(x);
    }
        else
    {
        cout<<"\nTry again.\n" <<"\n[ENTER]";
        cin.ignore();
        ugame();
        system("cls");
    }

    return 0;
}

int bgame(int x_p)
{
    int brand = rand()>>4;

    system("cls");
    cout<<"The bot will now choose an item.\n" <<"\n" <<"[ENTER]\n";
    cin.ignore();
    brand = rand() % 3 + 1;

    if ( brand == 1)
    {
        cout<<"\nBot chose rock!";
        cin.ignore();
        results(x_p, brand);
    }
    else if ( brand == 2 )
    {
        cout<<"\nBot chose paper!";
        cin.ignore();
        results(x_p, brand);
    }
    else if ( brand == 3 )
    {
        cout<<"\nBot chose scissors!";
        cin.ignore();
        results();
    }
    else
    {
        cout<<"\nError.";
        cin.ignore();
        bgame(x_p);
        system("cls");
    }
    return 0;
}

int results(int x_p, int brand_p)
{
  // Do whatever you want to do with x (x_p) and brand (brand_p).
}

1voto

Musicrafter12 Points 21

Dans votre cas, vous n'avez besoin de renvoyer qu'une seule valeur pour chaque fonction, donc return fonctionnerait. Au lieu de return 0 ;, utilisez return x ; et return brand ;. Dans la fonction de comparaison, définissez deux nouvelles variables, telles que y ; ou crand ;, puis affectez-les comme suit : y=int ugame() ; et crand=int bgame() ;. Ensuite, y=x et crand=brand et vous pouvez travailler à partir de là. Vous n'avez donc pas besoin de paramètres ou quoi que ce soit d'autre. N'essayez pas non plus de définir brand directement, déclarez simplement int brand ; et laissez la fonction de randomisation (qui doit être ensemencée avec srand d'ailleurs) assigner une valeur à brand. Vous n'avez pas non plus besoin de définir les fonctions comme int ; elles se définissent d'elles-mêmes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X