Menu

Je n'arrive pas à éxecuter mon programme

Messages postés
33
Date d'inscription
vendredi 24 février 2017
Statut
Membre
Dernière intervention
15 août 2018
-
Bonjour, j'essaye d'apprendre le C++ est dès que j'essaye de faire quelques chose de moi même rien ne marche.

Voici le code :

#include <iostream>
#include <string>
using namespace std;



int main()
{

int const nombreMeilleursScores(5);           //La taille du tableau

int meilleursScores[nombreMeilleursScores];   //Déclaration du tableau

 nomMeilleurJoueur("nothing");

meilleursScores[0] = 118218;  //Remplissage de la première case

meilleursScores[1] = 100432;  //Remplissage de la deuxième case

meilleursScores[2] = 87347;   //Remplissage de la troisième case

meilleursScores[3] = 64523;   //Remplissage de la quatrième case

meilleursScores[4] = 31415;   //Remplissage de la cinquième case

string nomMeilleurJoueur(0) = ("Nanoc");

string nomMeilleurJoueur(1) =("M@teo21");

string nomMeilleurJoueur(2) = ("Albert Einstein");

string nomMeilleurJoueur(3) = ("Isaac Newton");

string nomMeilleurJoueur(4) = ("Archimede");

for(int i(0); i<nombreMeilleursScores,nomMeilleurJoueur; ++i)

{

    cout << i << ")" << nomMeilleurJoueur << " avec un score de " << meilleursScores[i] << endl;

}
}



Donc voila si vous pourriez m'aider ça serait vraiment sympa
EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.
Afficher la suite 

2 réponses

Messages postés
5169
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
18 juillet 2019
786
0
Merci
Bonjour NiuSky,

En fait ton problème n'est pas que ton programme ne s'exécute pas, mais qu'il ne compile pas en raison de ses erreurs de syntaxe.

Le compilateur doit t'indiquer au moins la première erreur qu'il trouve....

chez moi, le compilateur g++ se plaint de :

$ g++ -Wall 35517065.cpp
35517065.cpp: In function ‘int main()’:
35517065.cpp:14:29: error: ‘nomMeilleurJoueur’ was not declared in this scope
nomMeilleurJoueur("nothing");

Compte tenu du reste de ton code, tu sembles vouloir utiliser un tableau de
string
pour y stocker 5 chaînes.

Si c'est bien le cas, tu dois, avant de l'utiilser, déclarer ce tableau de
string
, tout comme tu déclares ton tableau de
const int
.

Donc insérer quelque part avant toute utilisation quelque chose comme :

string nomMeilleurJoueur[nombreMeilleursScores];//Déclaration du tableau de string

Une fois que tu as corrigé ce premier problème, recompile ton code, et le compilateur t'en signalera d'autres. Et ainsi de suite. Cela s'appelle déboguer, et cela fait partie de ce que fait un programmeur. Essaye de comprendre les messages d'erreur et corriger par toi même avec leur aide et ton manuel / cours de C++.

nomMeilleurJoueur("nothing");
donnera une erreur, car ce ne sera pas une fonction. A vrai dire, je ne vois pas ce que tu veux faire là, et je pense qu'il faut juste retirer cette ligne.

Autres indications :

- les indices d'un tableau s'utilisent entre crochets, donc, comme tu fais avec le tableau de
int
, tu dois aussi utiliser des crochets avec le tableau de
string
...
- l'affectation d'une
string
déclarée au préalable se fait simplement
st = "une chaîne";
et pas comme tu le fais.

Essaye de déboguer par toi même, cela fait partie de l'apprentissage,et dis nous si tu es bloqué.

Dal
[Dal]
Messages postés
5169
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
18 juillet 2019
786 -
Quel est le message d'erreur que tu ne comprends pas et à quel code s'applique-t-il ?

Si tu as corrigé les problèmes signalés, tu as forcément de nouveaux messages d'erreur, pas les mêmes. Donc tu n'as pas "Toujours le même problème".

Poste ton code modifié sur le forum entre balises de code (pour utiliser les fonctionnalités de coloration syntaxique du forum), comme cela :

<code cpp>ton code ici</code>

ou en cliquant sur le bouton de ta fenêtre d'édition et en choisissant le langage cpp pour t'éviter de taper les balises


Poste aussi un copier coller de tes nouveaux messages d'erreur et dis nous ce que tu ne comprends pas.

essaye de m'envoyer le code intégralement

Je peux le faire,... en fait j'ai déjà écrit un code qui compile, sur la base du tien, en compilant et en corrigeant les erreurs ou avertissements, selon la méthode suivant : je traite le premier message d'erreur ou d'avertissement qui se manifeste, je recompile, je traite de nouveau le premier qui se manifeste, etc. Jusqu'à ce qu'il n'en reste plus et que le code compile proprement sans erreurs ni avertissements et s'exécute comme attendu. Mais ne penses-tu pas qu'il serait mieux que tu apprennes à déboguer ton code à l'aide des messages du compilateur ?

Dal
NiuSky
Messages postés
33
Date d'inscription
vendredi 24 février 2017
Statut
Membre
Dernière intervention
15 août 2018
2 -
non
[Dal]
Messages postés
5169
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
18 juillet 2019
786 -
J'ai supprimé les messages ayant inutilement fait dégénérer la discussion entre les autres intervenants de ce fil, et qui me paraissaient contraires à la Charte CCM.

Voilà un code corrigé possible aussi proche que possible de celui originellement posté. Je n'aurais pas fait comme cela personnellement, mais le but est de montrer au posteur originel comment faire les choses en correction de son code, ce qui peut aussi être une forme d'apprentissage pour clarifier les confusions.

#include <iostream>
#include <string>

using namespace std;

int main()
{
    int const nombreMeilleursScores(5);             //La taille du tableau
    int meilleursScores[nombreMeilleursScores];     //Déclaration du tableau d'entiers
    string nomMeilleurJoueur[nombreMeilleursScores];//Déclaration du tableau de string

    meilleursScores[0] = 118218;  //Remplissage de la première case
    meilleursScores[1] = 100432;  //Remplissage de la deuxième case
    meilleursScores[2] = 87347;   //Remplissage de la troisième case
    meilleursScores[3] = 64523;   //Remplissage de la quatrième case
    meilleursScores[4] = 31415;   //Remplissage de la cinquième case

    nomMeilleurJoueur[0] = "Nanoc";
    nomMeilleurJoueur[1] = "M@teo21";
    nomMeilleurJoueur[2] = "Albert Einstein";
    nomMeilleurJoueur[3] = "Isaac Newton";
    nomMeilleurJoueur[4] = "Archimede";

    for (int i(0); i<nombreMeilleursScores; ++i) {
        cout << i << ")" << nomMeilleurJoueur[i] <<
            " avec un score de " << meilleursScores[i] << endl;
    }

    return 0;
}
[Dal]
Messages postés
5169
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
18 juillet 2019
786 -
Venant du C, je préfère faire mes initialisations des types fondamentaux (qui sont communs au C et au C++) de cette façon :

int const nombreMeilleursScores = 5;

plutôt que :

int const nombreMeilleursScores(5);

(et pareil dans la boucle for, avec l'initialisation de i qui pourrait plutôt s'écrire
for (int i = 0; i<nombreMeilleursScores; ++i) {
).

en C++ l'effet est le même, mais comme il s'agit de types fondamentaux hérités du C, il me paraît naturel de les initialiser comme en C... mais c'est une question de style j'imagine.
[Dal]
Messages postés
5169
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
18 juillet 2019
786 -
un code plus à mon goût serait :

#include <iostream>
#include <string>

using namespace std;

int main()
{
    int const nombreMeilleursScores = 5;    // Taille des tableaux

    // Déclaration et initialisation du tableau d'entiers
    int meilleursScores[nombreMeilleursScores] {
        118218,
        100432,
        87347,
        64523,
        31415
    };
    // Déclaration et initialisation du tableau de string
    string nomMeilleurJoueur[nombreMeilleursScores] {
        "Nanoc",
        "M@teo21",
        "Albert Einstein",
        "Isaac Newton",
        "Archimede"
    };

    for (int i = 0; i<nombreMeilleursScores; ++i) {
        cout << i << ") " << nomMeilleurJoueur[i] <<
            " avec un score de " << meilleursScores[i] << endl;
    }

    return 0;
}
Commenter la réponse de [Dal]
Messages postés
727
Date d'inscription
dimanche 17 septembre 2017
Statut
Membre
Dernière intervention
25 février 2019
68
0
Merci
Bonjour,
Autre problème: la fonction
main
est déclarée en
int main()
mais ne retourne aucune valeur en sortie.
Ajoutez un
return 0;
à la fin ou déclarez-la en
void main()
[Dal]
Messages postés
5169
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
18 juillet 2019
786 -
void main()
n'est pas du C++ standard.

http://www.stroustrup.com/bs_faq2.html#void-main
Pinzou76
Messages postés
727
Date d'inscription
dimanche 17 septembre 2017
Statut
Membre
Dernière intervention
25 février 2019
68 -
Autant pour moi,
Tout ce que j'ai dit est faux.
Merci de m'avoir éclairé
[Dal]
Messages postés
5169
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
18 juillet 2019
786 -
pas de problème, il y a des subtilités :-)

En C++, selon le standard, les prototypes valides sont
int main()
ou
int main(int argc, char* argv[])
.

En ce qui concerne le
returrn 0;
en fin de programme, avant la dernière accolade fermante de main, il est facultatif en C++, le compilateur devant faire en sorte que le programme retourne 0 au système d'exploitation si l'exécution arrive à ce stade.

En C, les prototypes valides sont
int main(void)
ou
int main(int argc, char* argv[])
et
return 0;
est obligatoire jusqu'à C99. A partir de C99, un compilateur conforme à cette norme retournera 0 de façon implicite de la même façon qu'en C++.

Dal
Commenter la réponse de Pinzou76