CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

c++ void

n-snake16
n-snake16
Niveau 32
23 décembre 2019 à 15:30:57

Bonjour , je suis actuellement le cours c++ moderne sur le site zestedusavoir et je ne comprends pas dans quel cas de figure opté pour un type de retour void. Je sais qu'il ne nécessite pas de return " " en fin de fonction et qu'il est sans doute plus léger pour le code lui même cependant je n'arrive pas à me représenter dans dans quel cas il est peut être utile ou non
Si quelqu'un serait m'illustrer via un exemple clair et précis ce serait génial

Pseudo supprimé
Pseudo supprimé 23 décembre 2019 à 15:59:18

Le type de retour void ça veut dire que tu ne retourne rien, tu n'es même pas obligé de mettre un return qund tu fais une fonction void.
Le return dans les fonctions void servent surtout à faire des break (c'est a dire à indiquer au programme qu'il faut sortir de l fonction)

Tu utilises ce type de retour quand tu n'as pas besoin de retourner quelque chose tout simplement, par exemple si tu fais une fonction afficher qui affiche bonjour cela sera

void afficher() {
cout << "Bonjour" << endl;
}

Dans cette exemple tu vas juste afficher mais rien renvoyer

Shiba_the_Inu
Shiba_the_Inu
Niveau 84
23 décembre 2019 à 17:04:00

Perso j'utilise quasiment que ça et je crois pas que ce soit une bonne chose ^^' mais par rapport à ce que j'en fais et sais à mon niveau :

Si tu changes directement les valeurs t'as pas forcément besoin de retourner des valeurs.
Par exemple tu fais un personnage de jv avec une perte de pv et de pm :
void Perte_PV(int &pv)
{
pv -=10;
}

int Perte_pm(int pm)
{
return pm -= 5;
}

int main ()
{
int pv_personnage = 20;
int pm_personnage = 20;

Perte_PV(pv_personnage);
pm_personnage = Perte_pm(pm_personnage);

cout << pv_personnage << endl; // affiche 10
cout << pm_personnage; // affiche 15

}

Les pertes de PV tu les fait passer en référence dans la fonction void (utilisation du symbole &), donc la valeur de la variable pv_personnage utilisée dans la fonction principale changera directement, pas besoin de retourner de valeur dans ce cas là.

La perte de PM tu ne la changes pas directement, mais tu retournes la valeur de la fonction. Donc ça va créer une nouvelle variable temporaire (ici nommée pm ) dans la fonction Perte_pm, et on retourne la valeur de cette variable pm à la variable pm_personnage dans la fonction principale.

Donc ça dépend si tu veux retourner des valeurs, ou si tu changes directement la valeur de tes variables, mais cela nécessite de connaitre le système de pointeur et référence.
Après tu peux changer directement des variables dans une fonction qui retourne également quelque chose, genre une erreur d'initialisation ou autre.

Note, si tu dois modifier directement un tableau tu peux utiliser le signe du pointeur(*) au lieu de la référence (&) dans ton void :

void ValeursTableau(int *mon_tableau_a_modifier)
{
mon_tableau_a_modifier[0] = 55;
mon_tableau_a_modifier[1] = 33;
}

int main ()
{
int montableau[2];
ValeursTableau(montableau);
cout << "tableau 0 :" << montableau[0] << " tableau 1 : " << montableau[1];
}
Normalement ça t'affichera :
tableau 0 : 55 tableau 1 : 33

Message édité le 23 décembre 2019 à 17:07:25 par Shiba_the_Inu
n-snake16
n-snake16
Niveau 32
27 décembre 2019 à 08:37:19

Merci beaucoup les gars j'ai tout compris !

n-snake16
n-snake16
Niveau 32
30 décembre 2019 à 08:26:50

pour éviter de crée un autre topic je poste ici mon 2 ème problème
Je n'arrive pas à trouver d'ou vient l'erreur au niveau du <streamsize>::max() dans le code suivant

void entree_jour_securisee(int& jour)
{
SetConsoleOutputCP(1252);
while (!(std::cin >> jour))
{
std::cout << " Mauvaise entree , veuillez recommencer !!!" << std::endl;
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
}

int main()
{
int jour(0);
std::cout << " Quel jour du mois es-tu née ? " << std::endl;
entree_jour_securisee(jour);

return 0;
}

Encore merci de bien vouloir m'aider :ange:

Shiba_the_Inu
Shiba_the_Inu
Niveau 84
30 décembre 2019 à 11:10:21

Tu as pensé à ajouter l'include <limits> ?

Message édité le 30 décembre 2019 à 11:10:46 par Shiba_the_Inu
n-snake16
n-snake16
Niveau 32
30 décembre 2019 à 12:17:12

oui oui il est bien là , c'est pour ca que je ne comprends pas d'ou vient l'erreur , je pensais a une erreur de synthax ?

lokilok
lokilok
Niveau 16
30 décembre 2019 à 12:18:40

Tu pourrais nous donner l'erreur ?

n-snake16
n-snake16
Niveau 32
30 décembre 2019 à 12:22:54

Le 30 décembre 2019 à 12:18:40 lokilok a écrit :
Tu pourrais nous donner l'erreur ?

https://image.noelshack.com/fichiers/2019/01/1/1577704894-sans-titre.png
Et quand je click sur erreur la ligne me renvoit devant max

Message édité le 30 décembre 2019 à 12:23:11 par n-snake16
Shiba_the_Inu
Shiba_the_Inu
Niveau 84
30 décembre 2019 à 13:18:26

j'insiste mais c’est bien limits avec un s à la fin et sans c au début ? Chez moi ça marche ton code en tout cas, mais j'ai du virer le
SetConsoleOutputCP(1252);

Sinon, si ça peut t'aider :
https://stackoverflow.com/questions/20446373/cin-ignorenumeric-limitsstreamsizemax-n-max-not-recognize-it

n-snake16
n-snake16
Niveau 32
30 décembre 2019 à 13:30:25

oui je te copie ici toutes les en-têtes que j'ai mise donc limits.
Si j'en ai autant c'est pour me forcer a les connaitre par coeur.

  1. include<iostream>
  2. include<vector>
  3. include<array>
  4. include<cmath>
  5. include<string>
  6. include<Windows.h>
  7. include<algorithm>
  8. include<list>
  9. include<functional>
  10. include<cctype>
  11. include<numeric>
  12. include<fstream>
  13. include<cassert>
  14. include<limits>
  15. define NOMINMAX

J'ai essayé en supprimant SetConsoleOutputCP(1252);
malheureusement rien ne change :-(

Shiba_the_Inu
Shiba_the_Inu
Niveau 84
30 décembre 2019 à 13:44:28

Ah, je pense que tu devrais voir mon lien alors, ça doit être le windows.h qui pose problème :

This is because in Visual Studio when you use the windows includes it will define a macro max(). If you hover over the max() in your example you should receive an intellisense warning. You can solve this problem by undefining max after all your includes and before any code.

#undef max
lokilok
lokilok
Niveau 16
30 décembre 2019 à 13:46:21

Je pense que c'est à ça que sert le define NOMINMAX, le problème c'est qu'il est après l'include de windows.h donc il sert à rien. Il faut le mettre avant.

n-snake16
n-snake16
Niveau 32
30 décembre 2019 à 13:47:05

bingoooo ça marche ! Super merci :-d
jamais je n'y aurais pensé

n-snake16
n-snake16
Niveau 32
30 décembre 2019 à 13:50:42

Le 30 décembre 2019 à 13:46:21 lokilok a écrit :
Je pense que c'est à ça que sert le define NOMINMAX, le problème c'est qu'il est après l'include de windows.h donc il sert à rien. Il faut le mettre avant.

Oui aussi !
J'ai d'abord supprimer le windows.h et la ligne SetConsoleOutputCP(1252) qui a directement résolu le problème , ensuite je viens d'essayer de mettre le #define NOMINMAX avant le window.h ca fonctionne aussi , encore merci à vous

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment