alabb
Messages postés5Date d'inscriptionmardi 6 janvier 2004StatutMembreDernière intervention10 janvier 2004
-
6 janv. 2004 à 17:27
alabb
Messages postés5Date d'inscriptionmardi 6 janvier 2004StatutMembreDernière intervention10 janvier 2004
-
8 janv. 2004 à 13:25
aidez moi je suis un new bie, j'ai un segmentation fault a la fin du prog:
si gagant apres avoir affiché WINNER
si perdant apres avoir affiché "votre score est de.."
int ajouter_mot(char *filename){
char z;FILE *f;
printf("CONGRATULATION!!!!!!!! \\nEntrez le nouveau mot a rentrer:\\n");
scanf("%s",&z);
f=fopen(filename,"a");
if(f==NULL) {printf("fichier pas trouve");return 0;}
fprintf(f,"\\n");
fprintf(f,&z);
int etat(int chance){
if(chance==0){strcpy(&alex.statut,"Dead"); printf("YOU ARE DEAD\\n"); }
else if(strcmp(S,S2)==0){
strcpy(&alex.statut,"Safe"); ajouter_mot("mots_pendu.txt");
printf("WINNER\\n");}
else{
for(i=0;i<=6;i++){
printf("%c",S2[i]);}
strcpy(&alex.statut,"Sursit");
printf("\\nil vous reste %d chance(s) de reussir a decouvrir le mot;)\\n",chance);}
return 0;}
int make_score(){
alex.score=100*alex.chance*strlen(S);
printf("votr
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 6 janv. 2004 à 17:56
plusieurs choses :
- pour faire un retour chariot, c'est "\\n" pas "\\\\n"
- dans la fonction "load_word" :
for(i=0;i<h;i++)
{
fscanf(f,"%s\\\\n",S);
}
=> la chaîne de caractère S est écrasée à chaque lecture dans le fichier.
- dans la fonction "ajouter_mot" :
scanf("%s",&z);
=> tu veut lire une chaîne de caractère mais tu donne en paramètre un pointeur sur un seul caractères.
il faut :
scanf("%c", &z);
ou
char chaine[20];
scanf("%s", chaine);
meme chose pour
fprintf(f,&z);
cette fonction écrit une chaîne de caractères et tu lui donne l'adresse d'un caractère
=> la fonction va écrire tout ce qui se situe en mémoire après ce caractère jusqu'a trouver un caractère nul.
- strcpy(&alex.statut,"Dead");
tans ta déclaration de type, alex.statut est un caractère, pas une chaîne (un tableau quoi).
=> la fonction va écrire 'D' sur ce caractère pui 'e' sur l'octet suivant en mémoire et ainsi de suite...
D'ou le segmentation fault.
Avant de t'amuser à faire du malloc pour créer des chaîne de caractères, essaye d'abord de faire marcher ton prog en utilisant des tableaux statiques.
Attention à la différence entre un pointeur sur un caractère et un pointeur sur le premier caractères d'un tableau, qui se note effectivement char* mais qui ont des signification différentes.
alabb
Messages postés5Date d'inscriptionmardi 6 janvier 2004StatutMembreDernière intervention10 janvier 2004 7 janv. 2004 à 17:02
me rvoila avec moins de probleme et mertci de m'en avoir resolu
pour load word j'amerais
_ connaitre le nombre de ligne donc de mot dan smon fichier texte
_ pouvoir choper une ligne de facion aleatoire
por add_hightscore
_ ca me marque n importe koi je pense à des adrresses
_ j'ai un warning quand je veux ecrire tab[i].score dans mon fichier du style passing arg2 of makes pointer from integer
int ajouter_mot(char *filename){
char z[20];FILE *f;
printf("CONGRATULATION!!!!!!!! \\nEntrez le nouveau mot a rentrer:\\n");
scanf("%s",z);
f=fopen(filename,"a");
if(f==NULL) {printf("fichier pas trouve");return 0;}
fprintf(f,"\\n");
fprintf(f,z);
fclose(f);
return 0;}
char *crea(){
int i,j;
i=strlen(S);
printf("%d\\n",i);
S2=(char*)malloc(i*sizeof(char));
if(S2==NULL){printf("erreur Malloc");exit(1);}
for(j=0;j1){
printf("longueur > a 1\\n");
if(strcmp(L,S)==0){
a=1;
strcpy(S2,L);
}}
int etat(int chance){
int i;
if(chance==0){strcpy(alex.statut,"Dead"); printf("YOU ARE DEAD\\n"); }
else if(strcmp(S,S2)==0){
strcpy(alex.statut,"Safe"); ajouter_mot("mots_pendu.txt");
printf("WINNER\\n");}
else{
for(i=0;i<=6;i++){
printf("%c",S2[i]);}
strcpy(alex.statut,"Sursit");
printf("\\nil vous reste %d chance(s) de reussir a decouvrir le mot;)\\n",chance);}
return 0;}
int make_score(){
alex.score=100*alex.chance*strlen(S);
printf("votre score est de %d\\n",alex.score);
return 0;}
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 7 janv. 2004 à 21:48
pour lire une ligne dans un fichier, il y a la fonction fgets.
pour récupérer une ligne au hazard, tu parcours les lignes du fichier jusqu'à tomber sur la bonne.
pour modifier un ligne du fichier (MAJ highscore):
fait une copie de ton fichier dans un fichier temporaire.
écrase le contenu du fichier initiale (qui sera maintenat le fichier final)
parcours les lignes du fichier temporaire une par une.
- si elle n'est pas à modifier, tu la recopie telle quelle dans le fichier final.
- si ele doit être changée, tu écrit la nouvelle ligne à la suite du fichier final.
et ainsi de suite jusqu'à la fin du fichier temporaire
détruit le fichier temp
PS : je ne connait pas les fct de copie et de supression de fichier en C.