-5
votes

Question sur la manière dont je peux utiliser et obtenir juste la valeur de retour après la fonction est exécutée

Je fais une machine à états finie pour une classe de codage. Comment puis-je utiliser la valeur de retour pour modifier la valeur de contre HP dans ma principale, donc je n'aurai aucun autre problème avec mon code. Je veux juste le rendre capable de manipuler la valeur de HP et d'utiliser la nouvelle valeur de HP pour plus de fonctions.

Désolé si la solution à ce problème est vraiment simple. Je me lance de comprendre comment fonctionnent les fonctions de C ++ et ne peuvent pas sembler trouver une solution d'autre endroit en ligne ou en lecture des tutoriels. P>

#include <iostream>
#include <time.h>
using namespace std;

int forage(int HP) {
    cout << "The ant is in foraging state."<<endl;
    if (rand() % 100 < 60) {
            cout << "The ant found something!"<<endl;
        if (rand() % 100 < 10) {
            cout << "The ant found poison!" << endl;
            HP -= 1;
        }
        else {
            cout << "The ant found food!" << endl;
            HP += 1;
        }
    }
    int mHP = HP;
    return mHP;
}


 int main() {
        srand(time(NULL));
        int mHP = 0;
        cout << "Welcome to Ant Simulator"<<endl;

        forage(10);
        cout << mHP;
        system("pause");
        return 0;
    }


3 commentaires

Quelque chose comme MHP = fourrage (10); peut-être?


Bonjour, bienvenue dans le débordement de la pile. Étant donné qu'il s'agissait d'une question plutôt fondamentale, il pourrait être plus bénéfique pour vous de saisir et de suivre un Good C ++ Book ; Cela vous donnera une compréhension plus solide et intégrée que les questions au coup par coup.


AVERTISSEMENT : Utilisation de Rand () est considéré comme nocif et vous êtes fortement encouragé à utiliser un Installation de générateur de nombres aléatoires dans la bibliothèque standard qui produit des valeurs aléatoires de haute qualité. Votre utilisation de Time (NULL) en tant que graines de nombres aléatoires signifie que cela produira des résultats identiques si elle fonctionnera dans la même seconde, et sur de nombreuses plateformes rand () est à peine aléatoire du tout .


3 Réponses :


2
votes

Changer fourrage (10); à MHP = fourrage (10);

Votre fonction Forage est de type de retour int . Si vous souhaitez obtenir cette valeur de retour dans votre variable MHP , vous devez affecter la valeur de retour de la fonction à la variable comme décrit ci-dessus.


3 commentaires

S'il vous plaît élaborer, donner une explication de ce que le changement fait.


@ABYX La personne qui demande la question a évidemment peu de connaissances sur C ++, je viens de jeter du code à celui-ci ne changera rien à ce sujet. Si vous ajoutez du contexte à votre réponse, il peut en apprendre.


@ABYX " Pourquoi diriez-vous de vous donner une explication à votre commentaire? " En plus de cela, toutes les informations, pertinentes pour une réponse, doivent être présentes dans la réponse elle-même, pas dans les commentaires.



4
votes

Vous avez quelques choix. Une possibilité est de passer hp par référence et d'avoir fourrage modifier ce qui a été transmis: xxx

Une autre possibilité est de simplement utiliser le résultat renvoyé de fourrage : xxx

Si vous allez faire cela, vous pouvez ajouter une annotation afin qu'un compilateur récent vous indique Le problème si vous ignorez accidentellement la valeur, elle est renvoyée: xxx

[[nodiscard]] indique au compilateur que vous souhaitez assurer que la valeur renvoie la valeur renvoyée. De cette fonction n'est pas rejetée comme si votre code dans la question a fait.

comme de côté, je préférerais également que fourrage soit séparé en quelques pièces séparées. Je préférerais avoir une pièce qui traite strictement avec l'interface utilisateur (affichant les cordes sur ce qui s'est passé) et une autre qui traite strictement de la logique du jeu lui-même. En tant que point de départ, vous pourriez envisager de passer un flux en tant que paramètre et ayant Forge à ce flux: xxx

Cela peut aider avec les choses Comme portant le jeu pour travailler sous un système de fenêtrage, si vous décidez de faire quelque chose comme ça.


0 commentaires

1
votes

juste pour ajouter aux réponses précédentes ... Pour une compréhension de base Comment une fonction fonctionne avec votre fonction définie comme exemple: xxx

int antérieur Pour le nom de la fonction définit le type de retour, de sorte que votre fonction redonne à la fin de l'exécution. Vient ensuite le nom de votre fonction, dans ce cas fourrage , suivi des paramètres d'entrée. Dans votre cas, il n'y a qu'un seul paramètre d'entrée qui est une valeur entière int HP . Tout le code à l'intérieur des supports bouclés est exécuté à l'appel de la fonction.

Toutes les fonctions qui n'ont pas le type de retour void ont une déclaration de retour quelque part (la plupart des temps à la fin) dans leur code. La valeur de retour réelle est attribuée à une variable comme celle-ci: xxx


0 commentaires