Enregistrement d'un tableau dans un fichier
Bonsoir, je suis entrain de programmer le jeux "mastermind "en application console , je veux mémoriser la combinaison choisit au hasard par la machine dans un fichier texte ... mais j'ai pas réussite à là faire... la combinaison se trouve dans le variable mm_combi ... voila mon code :
qu'est ce que vous me conseillée de faire ?????? :/
EDIT: Ajout de la coloration syntaxique.
qu'est ce que vous me conseillée de faire ?????? :/
#include<iostream> #include<stdio.h> #include<ctime> #include<cstdlib> #include<conio.h> using namespace std ; #define maxcombi 4 #define maxcouleurs 6 #define maxessai 10 char mm_combi [maxcombi+1]; char mm_proposition [maxcombi+1]; unsigned i=1,j,k=0 ; int n_bien_p=0,n_mall_p=0,pos=0; FILE *fich; void tirage_au_sort() { fich=fopen("c:/fichier/projet.txt", "r"); unsigned a ; srand(time(NULL)); for (i=0;i<maxcombi;i++) { a=rand()%(maxcouleurs) +1 ; switch (a) { case 1 :mm_combi[i]='r'; break ; case 2 :mm_combi[i]='b'; break ; case 3 :mm_combi[i]='v'; break ; case 4 :mm_combi[i]='o'; break ; case 5 :mm_combi[i]='j'; break ; case 6 :mm_combi[i]='m'; break ; }; } fscanf(fich,"%s",mm_combi); fprintf(fich,"%s",mm_combi); fclose(fich); } void lecture_de_la_proposition (char tab[maxcombi+1]) { tab[4]='\0'; cout << "\n\n\t\tVous allez donner votre proposition:\n"<< endl ; cin >> tab; if (tab[4]!='\0') cout<<"\n\tATTENTION ! vous devez entrer SEULLEMENT 4 caracteres !!"<<endl; } void calcule_de_score (char t[maxcombi+1],char p[maxcombi+1]) { char ts[maxcombi+1]={"0000"}; char ts2[maxcombi+1]={"0000"}; n_bien_p=0; n_mall_p=0; pos=0; for (i=0;i<maxcombi;i++) for (j=0;j<maxcombi;j++) if(t[i]==p[j] && ts[i]== '0' && ts2[j]=='0' ) { ts[i]++; ts2[j]++; n_bien_p++; j=maxcombi+1; }; n_mall_p = maxcombi - n_bien_p; for (i=0;i<maxcombi;i++) if (t[i]==p[i]) pos++; cout <<"n_bien_p:\t"<<n_bien_p<<endl; cout <<"n_mall_p:\t"<<n_mall_p<<endl; cout <<"n_bien_pos: "<<pos<<endl; } void main () { do {k=0; cout<<"\n\t\tBienvenu au MASTERMIND ,\n\n\n \tC'ent un jeux de reflexion dont voux devez decoder un code de 4 couleurs tirer parmi 6 en tappant les premiers lettres des couleurs \n \n\n\n \tLes couleurs sont les suivants:\n\n\t\tRouge\tVert\tBleu\tJaune\tMarron\tOranger \n \n \n\n \tREMARQUE :les lettres doivent entre tappees en miniscule sinon votre proposition est FAUSSE "<<endl; tirage_au_sort(); do {if (k>=10) break; lecture_de_la_proposition( mm_proposition); calcule_de_score(mm_combi,mm_proposition); k++; } while((n_bien_p != maxcombi) || ( pos!=maxcombi)) ; if ((n_bien_p == maxcombi) && ( pos==maxcombi)) cout<<"\n\n\n\t\tbravouuuuuuu, (Y) :) vous avez gagnez"<<endl; else cout<<"\n\n\n\tdsl :/ , vous avez perdu "<<endl; cout<<"\n\n\tSi vous voulez rejouer encore une fois , merci de taper 1 :)\n\n "<<endl; cin>>i; } while (i==1); getch(); }
EDIT: Ajout de la coloration syntaxique.
A voir également:
- Enregistrement d'un tableau dans un fichier
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier bin - Guide
- Tableau word - Guide
- Trier un tableau excel - Guide
1 réponse
Bon nous allons passer sur le code en lui-même qui contient beaucoup de choses qui ne vont pas du tout et nous centrer sur le problème en lui même, écrire une chaîne dans un fichier.
1) Comment écrire dans un fichier
L'exemple ci-dessous montre comment écrire un fichier proprement :
2) Pièges classiques dûs aux types
La seconde "difficulté" potentielle dans ton code, c'est va-t'on écrire ce qu'on veut ? Si ce sont les caractères associés à tes couleur que tu veux écrire, pas de problème.
Maintenant supposons que tu veuilles écrire les nombres correspondants à chaque couleur et que tu aies eu envie de les stocker dans des uint8_t. Pas de chance, en C++ un uint8_t est vu comme un char, et on n'affichera donc le caractère ASCII correspondant au lieu de la valeur numérique. Pour éviter ça, il faudrait donc caster l'uin8_t qu'on souhaite écrire (par exemple en uint16_t).
Exemple :
... retourne :
Bonne chance
1) Comment écrire dans un fichier
L'exemple ci-dessous montre comment écrire un fichier proprement :
#include <iostream> #include <fstream> int main() { const char * filename = "toto.txt"; std::ofstream ofs(filename); if (ofs) { ofs << "bonjour" << std::endl; ofs.close(); } else { std::cerr << "Can't write in " << filename << std::endl; } return 0; }
ofsest ici un flux qui permet d'écrire dans un fichier comme si on écrivait dans
std::cout, le flux de sortie standard. Il faut simplement contrôler qu'il est ouvert avec succès avant d'écrire dedans. Il faut veiller à le fermer (si et seulement si il a été ouvert avec succès) une fois qu'on a fini d'écrire dedans.
2) Pièges classiques dûs aux types
La seconde "difficulté" potentielle dans ton code, c'est va-t'on écrire ce qu'on veut ? Si ce sont les caractères associés à tes couleur que tu veux écrire, pas de problème.
Maintenant supposons que tu veuilles écrire les nombres correspondants à chaque couleur et que tu aies eu envie de les stocker dans des uint8_t. Pas de chance, en C++ un uint8_t est vu comme un char, et on n'affichera donc le caractère ASCII correspondant au lieu de la valeur numérique. Pour éviter ça, il faudrait donc caster l'uin8_t qu'on souhaite écrire (par exemple en uint16_t).
Exemple :
#include <iostream> #include <cstdint> int main() { uint8_t x = 117; std::cout << "x = " << x << std::endl << "uint16_t(x) = " << uint16_t(x) << std::endl; return 0; }
... retourne :
x = u
uint16_t(x) = 117
Bonne chance