Bon, voila j'ai midife les trucs avec les tableaux a double dim et 2 ou 3 trucs
et ca a l'air de marcher chez moi.
Si ca marche pas chez toi dis-le moi.
Voici le code:
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <iostream> #include <string.h>
using namespace std;
class interface { public : interface(); ~interface(); int compteurlignes(); // sert a calculer le nombre de ligne void lecturefichier(); // sert a lire le fichier "pays.txt" afin de recuperer les capitales et pays char *selectionaleatoire(); // choisit un pays au hasard void question(); // je pense que ça se passe de commentaire :) int nb_pays; // le nombre de pays RESTANT avant la fin du programme private : int lignes; // le nombre de lignes int nb_lignes; // nombre de lignes bis, j'en ai mis deux afin de controler les etapes du programmes pour voir ou ça bugge mais bon ça bug tjrs mais on peut mettre une seule variable ça marchera aussi char pays[255][255]; // les pays, tableau a deux dimensions : le premier [255] correspond au numero du pays et le deuxieme correspond au nom du pays char capitales[255][255]; // la meme chose que pays int pays_actuel; // le pays aleatoire genere par selectionaleatoire() FILE* file;
char reponse[255]; };
interface::interface() // S affiche quand on cree l'objet { // Blabla habituel ! cout << "Bienvenue dans ce merveilleux programme !\n Grace a lui,\n vous allez connaitre toutes les capitales et pays en moins de deux !"; cout << "\nMagnifique n'est-il pas ?"; cout << "\nEntrons vite dans le vif du sujet allez hop première question !";
} interface::~interface() { // sert juste pour que je me rappelle qu'il y a tjrs un destructeur quand on cree un objet :) cout << "Fin du programme bzzzzz.....TUTUTU !"; }
int interface::compteurlignes() // calcule le nb de lignes { // j'avoue cette partie-là je l'ai pompé sans trop la comprendre (g l'impression que ça merde ici parce que quand j'affiche le nb_lignes a la fin du prog ça me met 0 :() nb_lignes=1; char c;
file=fopen("c:\\pays.txt", "r"); // on ouvre en lecture do { c=fgetc(file); // g pompe je sais pas a quoi ça correspond ! if (c=='\n') {nb_lignes++;}
}while (c!=EOF); // tant qu'on est pas a la fin du fichier
fclose (file); return nb_lignes; }
void interface::lecturefichier() // ça aussi g pompe donc je sais pas comment ça marche { lignes = compteurlignes(); nb_pays=lignes/2; if (lignes % 2 != 0) // on vérifie qu'il y autant de pays que de capitales ! cerr <<"Erreur dans le fichier pays.txt !"; file = fopen ("c:\\pays.txt", "r"); // j'ai l'impression que ça marche pas non plus a cet endroit donc les commentaires après c ce que je voulais faire en théorie { for (int i = 0 ; i < nb_pays ; i++) // Pour autant qu'il y a de pays { fscanf (file, "%s", pays[i]); // on stocke dans le tableau pays
fscanf (file, "%s", capitales[i]); // puis dans le tableau capitales } }
fclose (file); } char *interface::selectionaleatoire() { pays_actuel = rand()%nb_pays; // sort un numero de pays aleatoirement
return pays[pays_actuel];
} void interface::question() {
cout << "\nQuelle est la capitale du "<< selectionaleatoire() << " ? "; cin.getline(reponse,255); //if (reponse[255] == capitales[pays_actuel][255]) if (strcmp(reponse,capitales[pays_actuel])==0) { cout << "\nBonne réponse ! Allez on continue :"; int i=pays_actuel; for (int x=nb_pays-pays_actuel;x!=nb_pays;i++) // alors là c le foutoire, en gros g voulu que si la reponse etait bonne le pays ne soit pas retire { strcpy(pays[i],pays[i+1]); strcpy(capitales[i],capitales[i+1]); ++x; } --nb_pays; // afin d'arreter le programme quand y aura plus de pays ! } else //sinon.... { cout << "\nMauvaise réponse ! Question suivante : "; } }
int main() { interface paysInterface; // on cree un objet paysInterface.compteurlignes(); // on cherche le nombre de lignes dans "pays.txt" paysInterface.lecturefichier(); // on lit le fichier afin de stocker tous les noms de pays et de capitales dans le programme do { paysInterface.question(); } while(paysInterface.nb_pays!=0); // tant qu'on a pas trouve toutes les reponses le programme continue de poser des questions ! return 0; }
|
Bye,Xentor609
-------------------------------
Réponse au message :
-------------------------------
> Ok donc:
> - J'ai supprimé la partie qui empechait de reposer la question précédente.
> - Lors de la lecture dans fichier dans les tableau, j'ai mis des caracteres NULL a la fin des nom des pays/villes
> - Vu qu'on dispose de tableaux contenant des chaines de caracteres terminées par NULL, on peut les comparer avec la reponse de l'utilisateur grace a strcmp(), et ca affiche si c'est bon ou pas.
>
> Il me faut ton mail pour t'envoyer le tout.
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > Salut,
> > Je suis sur le coup:
> > Je viens de voir des choses HORRIBLES :) :
> > quand tu fais:
> > if (reponse[255] == capitales[pays_actuel][255])
> > tu ne fait que comparer 1 caracteres ! pas toute la chaine!
> > Une chaine de caractere c'est une suite de caractere terminée par un caractere NULL '\0'.
> > Pour copier, concatener et comparer 2 chaines tu ne peut pas utiler '=' ou '==', il faut faire appel aux fonctions strcpy, strcat, et strcmp, respectivement.
> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > a priori au niveau des classes y a aucun probleme donc si tu modifies rien au classes tu peux m'envoyer les fonctions ?
> > >
> > >
> > >
> > > -------------------------------
> > > Réponse au message :
> > > -------------------------------
> > >
> > > > Désolé mais les classes j'y comprend rien donc si une erreur vient de la j'aurai du mal a la resoudre. Pour les fonctions en elles memes je vais regarder ce que je peux faire.
> > > >
> > > >
> > > >
> > > > -------------------------------
> > > > Réponse au message :
> > > > -------------------------------
> > > >
> > > > > Tu pourrais reussir a me faire marcher le programme stp parce que j'en ai marre j'arrive pas ça plante ça plante !
> > > > > (tu peux mettre le code source quand tu reussiras a le faire marcher avec les pointeur qui pointent sur les tableaux et que ça affichera vraiment quelle est la capitale de la france ?)
> > > > > Merci bcp !!!!
> > > > >
> > > > > P.S : je sais que je te demande bcp mais la j'en ai plus que marre ça fait trop longtemps que je suis dessus et ça marche pas... :((((
> > > > >
> > > > >
> > > > >
> > > > > -------------------------------
> > > > > Réponse au message :
> > > > > -------------------------------
> > > > >
> > > > > > Salut,
> > > > > > J'ai jamais utilisé fscanf, mais je pense que ca remplira une ligne de ton tableau avec une ligne du fichier. Tu peux aussi utiliser fgets().
> > > > > > Sinon chez moi ca compile tres bien, et j'ai plus d'erreurs lors de l'execution, seulement les questions sont du type: "quelle est la capitale du p ?"
> > > > > > car ta fonction selectionaleatoire() retourne un simple caractere au lieu d'un pointeur vers une chaine de caractere.
> > > > > > Il faudrait verifier qu'un caractere NULL est bien placé a la fin de ce que tu veux afficher et faire retourner un char *.
> > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>