Problème programme c++
Résolu
dqsdqsfds
-
hjsldqdsq -
hjsldqdsq -
Bonjour,
Bonjour,
Salut, je commence le c++, et je ne vois pas pourquoi le programme ne fonctionne pas ; le debugger (Code::Blocks) ne dit rien, mais le programme "A cessé de fonctionné. Windows cherche une solution au programme" :
#include <iostream>
#include <cstdlib>
#include <string>
#include <ctime>
//system("cls");
using namespace std;
int main()
{
cout << "Bienvenue dans le systeme de combats" << endl << endl;
//Variables du joueur
int joueur_vie(100);
string joueur_arme;
int degats_arme;
string joueur_armure;
int defense_armure;
int potion_vie(30);
//Variables des monstres
//Monstre 1
string blob("Blob");
string description_blob("Un monstre visqueux et faible");
int vie_blob(20);
int degats_blob(5);
int defense_blob(1);
int taux_apparition_blob(30);
//Monstre 2
string loup("Loup");
string description_loup("Un animal feroce. Prenez garde !");
int vie_loup(50);
int degats_loup(10);
int defense_loup(2);
int taux_apparition_loup(20);
//Monstre 3
string goliath("Goliath");
string description_goliath("Un goliath de pierre. A beaucoup de vie.");
int vie_goliath(100);
int degats_goliath(3);
int defense_goliath(5);
int taux_apparition_goliath(10);
//Monstre 4
string lave("Monstre de lave");
string description_lave("Constitue de lave. Attention aux brûlures.");
int vie_lave(40);
int degats_lave(15);
int defense_lave(2);
int taux_apparition_lave(20);
int brulure(20);
//Monstre 5
string squelette("Squelette");
string description_squelette("Un gentil tas d'os.");
int vie_squelette(10);
int degats_squelette(10);
int defense_squelette(5);
int taux_apparition_squelette(20);
int esquive(50);
//Tableaux regroupants les monstres
string nom[5];
string description[5];
int vie[5];
int degats[5];
int defense[5];
nom[0] = blob;
nom[1] = loup;
nom[2] = goliath;
nom[3] = lave;
nom[4] = squelette;
description[0] = description_blob;
description[1] = description_loup;
description[2] = description_goliath;
description[3] = description_lave;
description[4] = description_squelette;
vie[0] = vie_blob;
vie[1] = vie_loup;
vie[2] = vie_goliath;
vie[3] = vie_lave;
vie[4] = vie_squelette;
degats[0] = degats_blob;
degats[1] = degats_loup;
degats[2] = degats_goliath;
degats[3] = degats_lave;
degats[4] = degats_squelette;
defense[0] = defense_blob;
defense[1] = defense_loup;
defense[2] = defense_goliath;
defense[3] = defense_lave;
defense[4] = defense_squelette;
//Armes
string epee_bois("Epee en bois");
int degat_bois(10);
string epee_fer("Epee en fer");
int degat_fer(15);
string lance_or("Lance d'or");
int degat_or(20);
string excalibur("Excalibur");
int degat_excalibur(30);
string error_404("Error 404");
int degat_error404(42);
//Defense
string armure_bois("Armure en bois");
int defense_bois(2);
string armure_fer("Armure en fer");
int defense_fer(5);
string armure_or("Armure en or");
int defense_or(8);
string error_403("Error 403");
int defense_error403(42);
//Variables joueur au départ du jeu
joueur_arme = epee_bois;
degats_arme = degat_bois;
joueur_armure = armure_bois;
defense_armure = defense_bois;
cout << "Votre aventure commence dans un petit chateau." << endl << "Bla bla bla" << endl << "Vous trouvez une epee en bois et une armure en bois" << endl << "Et vous decidez de partir a l'aventure" << endl << endl;
while (joueur_vie > 0)
{
int choix_du_monstre(0); //Choix du monstre
choix_du_monstre = rand() % 10;
int monstre;
if (choix_du_monstre < 3)
{
int monstre(0);
}
else if (choix_du_monstre < 5)
{
int monstre(1);
}
else if (choix_du_monstre < 6)
{
int monstre(2);
}
else if (choix_du_monstre < 8)
{
int monstre(3);
}
else
{
int monstre(4);
}
//Debut du combat
string nom_monstre;
string description_monstre;
int vie_monstre;
int degats_monstre;
int defense_monstre;
nom_monstre = nom[monstre];
description_monstre = description[monstre];
vie_monstre = vie[monstre];
degats_monstre = degats[monstre];
defense_monstre = defense[monstre];
}
cout << endl << "Vous avez perdu ... Dommage !" << endl;
return 0;
}
Voilà, merci en avance pour votre aide.
Bonjour,
Salut, je commence le c++, et je ne vois pas pourquoi le programme ne fonctionne pas ; le debugger (Code::Blocks) ne dit rien, mais le programme "A cessé de fonctionné. Windows cherche une solution au programme" :
#include <iostream>
#include <cstdlib>
#include <string>
#include <ctime>
//system("cls");
using namespace std;
int main()
{
cout << "Bienvenue dans le systeme de combats" << endl << endl;
//Variables du joueur
int joueur_vie(100);
string joueur_arme;
int degats_arme;
string joueur_armure;
int defense_armure;
int potion_vie(30);
//Variables des monstres
//Monstre 1
string blob("Blob");
string description_blob("Un monstre visqueux et faible");
int vie_blob(20);
int degats_blob(5);
int defense_blob(1);
int taux_apparition_blob(30);
//Monstre 2
string loup("Loup");
string description_loup("Un animal feroce. Prenez garde !");
int vie_loup(50);
int degats_loup(10);
int defense_loup(2);
int taux_apparition_loup(20);
//Monstre 3
string goliath("Goliath");
string description_goliath("Un goliath de pierre. A beaucoup de vie.");
int vie_goliath(100);
int degats_goliath(3);
int defense_goliath(5);
int taux_apparition_goliath(10);
//Monstre 4
string lave("Monstre de lave");
string description_lave("Constitue de lave. Attention aux brûlures.");
int vie_lave(40);
int degats_lave(15);
int defense_lave(2);
int taux_apparition_lave(20);
int brulure(20);
//Monstre 5
string squelette("Squelette");
string description_squelette("Un gentil tas d'os.");
int vie_squelette(10);
int degats_squelette(10);
int defense_squelette(5);
int taux_apparition_squelette(20);
int esquive(50);
//Tableaux regroupants les monstres
string nom[5];
string description[5];
int vie[5];
int degats[5];
int defense[5];
nom[0] = blob;
nom[1] = loup;
nom[2] = goliath;
nom[3] = lave;
nom[4] = squelette;
description[0] = description_blob;
description[1] = description_loup;
description[2] = description_goliath;
description[3] = description_lave;
description[4] = description_squelette;
vie[0] = vie_blob;
vie[1] = vie_loup;
vie[2] = vie_goliath;
vie[3] = vie_lave;
vie[4] = vie_squelette;
degats[0] = degats_blob;
degats[1] = degats_loup;
degats[2] = degats_goliath;
degats[3] = degats_lave;
degats[4] = degats_squelette;
defense[0] = defense_blob;
defense[1] = defense_loup;
defense[2] = defense_goliath;
defense[3] = defense_lave;
defense[4] = defense_squelette;
//Armes
string epee_bois("Epee en bois");
int degat_bois(10);
string epee_fer("Epee en fer");
int degat_fer(15);
string lance_or("Lance d'or");
int degat_or(20);
string excalibur("Excalibur");
int degat_excalibur(30);
string error_404("Error 404");
int degat_error404(42);
//Defense
string armure_bois("Armure en bois");
int defense_bois(2);
string armure_fer("Armure en fer");
int defense_fer(5);
string armure_or("Armure en or");
int defense_or(8);
string error_403("Error 403");
int defense_error403(42);
//Variables joueur au départ du jeu
joueur_arme = epee_bois;
degats_arme = degat_bois;
joueur_armure = armure_bois;
defense_armure = defense_bois;
cout << "Votre aventure commence dans un petit chateau." << endl << "Bla bla bla" << endl << "Vous trouvez une epee en bois et une armure en bois" << endl << "Et vous decidez de partir a l'aventure" << endl << endl;
while (joueur_vie > 0)
{
int choix_du_monstre(0); //Choix du monstre
choix_du_monstre = rand() % 10;
int monstre;
if (choix_du_monstre < 3)
{
int monstre(0);
}
else if (choix_du_monstre < 5)
{
int monstre(1);
}
else if (choix_du_monstre < 6)
{
int monstre(2);
}
else if (choix_du_monstre < 8)
{
int monstre(3);
}
else
{
int monstre(4);
}
//Debut du combat
string nom_monstre;
string description_monstre;
int vie_monstre;
int degats_monstre;
int defense_monstre;
nom_monstre = nom[monstre];
description_monstre = description[monstre];
vie_monstre = vie[monstre];
degats_monstre = degats[monstre];
defense_monstre = defense[monstre];
}
cout << endl << "Vous avez perdu ... Dommage !" << endl;
return 0;
}
Voilà, merci en avance pour votre aide.
3 réponses
-
Je pense que tu ne sors jamais de la boucle
while (joueur_vie > 0)
Vérifie que joueur_vie vaut bien 0 à un moment. -
Bonjour
Comme l'a dit Jithel, il semble que tu ne modifies jamais joueur_vie, donc tu ne sortiras jamais de ta boucle.
Mais ce n'est pas ce qui provoque "Le programme a cessé de fonctionner". Au contraire, ça l'empêcherait plutôt de cesser !
Le problème est que tu n'initialises pas ta variable monstre, donc une instruction commenom_monstre = nom[monstre];
va chercher n'importe où dans la mémoire , et provoque un gros plantage.
Tu crois que tu initialises monstre quand tu faisif (choix_du_monstre < 3) { int monstre(0); }Ce n'est pas vrai. Pas complètement faux, mais en fait tu déclares une nouvelle variable monstre que tu initialises à 0 et qui est détruite aussitôt, car la portée d'une variable est limitée au bloc dans lequel elle est déclarée , c'est à dire entre l'accolade { qui précède et l'accolade } correspondante. Cette variable n'existe qu'entre ces deux accolades, et cache la variable monstre définie à l'extérieur des accolades.
Pour initialiser la variable dans les accolades, il suffit d'une affectationmonstre = 0;
, il ne faut pas redéfinir monstre.
Voir le 4e exemple du paragraphe IV-A qui correspond exactement à ton cas :
https://www.squalenet.net/fr/ti/tutorial_c/6-variables-type-declaration-portee.php5 -