Probleme programme en c

yacinebosss Messages postés 184 Statut Membre -  
yacinebosss Messages postés 184 Statut Membre -
Bonjour, je sais mon code est merdique mais je ne sais pas comment faire la , je bloque:


int main()
{
    char MotSecret[]="BONJOUR";

    int NombreDeLettre=0;



   printf("      *********Le Jeu Du Pendule*******\n");




   CompteNombreLettre(&MotSecret,&NombreDeLettre)



   printf("%d",NombreDeLettre);



}



 int CompteNombreLettre(char* MotSecret,int* NombreDeLettre)
{
    int NombreDeLettre2=0;

    FILE* fichier=NULL;

    fichier=fopen("MotSecretf.txt","w");

    fprintf(fichier,*MotSecret);

    fclose(fichier);


    fichier=fopen("MotSecretf","r");



   while(fichier!=EOF)
 {
     fgetc("fichier");

    NombreDeLettre2++;
 }

    fclose(fichier);

    *NombreDeLettre=NombreDeLettre2;
}




ET IL Y'A AUSSI CETTE VERSION:


int main()
{
    char MotSecret[]="BONJOUR";

    int NombreDeLettre=0;

   printf("      *********Le Jeu Du Pendule*******\n");



   NombreDeLettre = ComteNombreLettre(MotSecret);

   printf("%d",NombreDeLettre);



}



int ComteNombreLettre(char MotSecret)
{
    char MotSecret2[100]={0};

    int NombreDeLettre=0;

  strcpy(MotSecret2,MotSecret)



    FILE* fichier=NULL;

    fichier=fopen("MotSecretf.txt","w");

    fprintf(fichier,MotSecret2);

    fclose(fichier);


    fichier=fopen("MotSecretf","r");



   while(fichier!=EOF)
 {
     fgetc("fichier");

    NombreDeLettre++;
 }

    fclose(fichier);

    return NombreDeLettre;
}

  


aidez moi plz, mon programme je crois qu'il est facile alors je pas la peine d'explication.

merci d'avance. :)

1 réponse

fiddy Messages postés 11653 Statut Contributeur 1 847
 
Bonjour,

Les explications sont toujours nécessaires. Cela nous permet de répondre plus rapidement. Et notamment, il faut a minima nous dire ce qui ne fonctionne pas ou à défaut qu'est-ce qui te fait penser que ça bloque.

Remarque générale : les noms de variables commencent conventionnellement par une minuscule. Donc plutôt motSecret que MotSecret.

CompteNombreLettre(&MotSecret,&NombreDeLettre)
Pas de & devant MotSecret.

fprintf(fichier,*MotSecret);
  • MotSecret ne désigne qu'un char. Si tu souhaites écrire la chaîne entier, il faut mettre : MotSecret (sans l'étoile).

Attention à l'utilisation de fprintf(). Il faut mettre : fprintf(fichier, "%s", MotSecret); et non (MotSecret directement).

Note : NombreDeLettre2 est inutile. Tu pouvais directement incrémenter NombreDeLettre.

int CompteNombreLettre(char* MotSecret,int* NombreDeLettre)
Ta fonction est censée renvoyer un int. Pourtant tu n'as pas mis de return...

printf("%d",NombreDeLettre);
Il faut mettre un \n à la fin du printf pour forcer l'affichage avant la fin du programme.

int main()
Le bon prototype du main() sans argument est : int main(void)
De plus, il renvoie un int. Il faut donc mettre un return 0; à la fin du programme.
0
yacinebosss Messages postés 184 Statut Membre 3
 
d'abord merci.

L’EXPLICATION DU PROGRAMME :

mon programme en faite est un exercice, j'essaye de réalisé le jeu du pendule (je suis au début du début).

dans la fonction main je crée une chaine de caractère et une variable Nombre.. et j'envois leur adresse a la fonction Compte.. pour modifier la variable est copier la chaîne dans un ficheir pour pouvoir travaillé dessus (je sais qu'il y'a sans doute d'autre facon de faire ca mais je tien a la mien ^^ ) apres je compte le nombre de lettre de la chaine pour faire :

while(i<Nombre..)
{
  printf("*");

  i++;
}

 


c'est tout :)


j'ai corrigé les erreurs que vous m'avez fait remarqué.mais ca me dit qu'il y'a une erreur
quand j'envois les adresse CompteNombre...(..,&..).

et voici le programme apres modification:

 int main(void)
{
    char MotSecret[]="BONJOUR";

    int NombreDeLettre=0;



   printf("      *********Le Jeu Du Pendule*******\n");




   CompteNombreLettre(MotSecret,&NombreDeLettre)



   printf("%d\n",NombreDeLettre);

   return 0;

}



 int CompteNombreLettre(char* MotSecret,int* NombreDeLettre)
{


    FILE* fichier=NULL;

    fichier=fopen("MotSecretf.txt","w");

    fprintf(fichier,"s",MotSecret);

    fclose(fichier);


    fichier=fopen("MotSecretf","r");



   while(fichier!=EOF)
 {
     fgetc("fichier");

    *NombreDeLettre++;
 }

    fclose(fichier);

    return 0;
}



QUESTION:

_dans le cour que je suis on nous dit d’écrire les nom des variable en commencent par une majuscule. (c'est pas vraiment une question en faite :) )

_pourquoi quad je fait &MotSecret c'est faut (j'ai pas fait ca dans le cour). en n'a utilisé les pointeur juste des variable.

merci :)
0
yacinebosss Messages postés 184 Statut Membre 3
 
et quand j'ai écrit le même programme en utilisant juste les variable c'est faux ?
0
fiddy Messages postés 11653 Statut Contributeur 1 847 > yacinebosss Messages postés 184 Statut Membre
 
Mal corrigé ;-). Tu as mis "s" au lieu de "%s" dans fprintf(fichier,"s",MotSecret);
Remarque supplémentaire : fichier=fopen("MotSecretf","r");
C'est normal d'utiliser un autre fichier ? Le 1er contient .txt, pas le second.
fgetc("fichier");
C'est fichier et pas "fichier".

_pourquoi quad je fait &MotSecret c'est faut (j'ai pas fait ca dans le cour). en n'a utilisé les pointeur juste des variable.
Lorsque tu utilises le tableau MotSecret en paramètre de fonction, il est converti en adresse de pointeur sur le 1er élément du tableau. Autrement dit, MotSecret dans ce contexte est un char*. Il ne faut donc pas mettre d'esperluette devant.

et quand j'ai écrit le même programme en utilisant juste les variable c'est faux ?
Pas compris ta question.
0
yacinebosss Messages postés 184 Statut Membre 3
 
MAGNIFIQUEEE ca marche

voici le programme:

int main()
{
    char MotSecret[]="BONJOUR";

    int NombreDeLettre=0;

    int i=0;

   printf("      *********Le Jeu Du Pendule*******\n\n\n");

 printf("BONJOUR\n");

   NombreDeLettre = ComteNombreLettre(MotSecret);



 while(i+1<NombreDeLettre)
{
  printf("*");

  i++;
}


}



int ComteNombreLettre(char MotSecret[])
{


    int NombreDeLettre=0;

    int PositionDuCurseur=0;



    FILE* fichier=NULL;

    fichier=fopen("MotSecretf.txt","w");

    fprintf(fichier,"%s",MotSecret);

    fclose(fichier);


    fichier=fopen("MotSecretf.txt","r");


   do
 {
     PositionDuCurseur=fgetc(fichier);

    NombreDeLettre++;

 }while(PositionDuCurseur!=EOF);

    fclose(fichier);


    return NombreDeLettre;
}


JE SUIS TELLEMENT CONTENT DE MOI :) .
0
fiddy Messages postés 11653 Statut Contributeur 1 847
 
Ya eu du rétropédalage par rapport à la dernière version.
int main()
C'est int main(void).
Il manque le return 0.

fichier=fopen("MotSecretf","r");
Je remets ma question : est-ce normal que ce soit MotSecretf sans .txt ? (Comme fait lors du 1er fopen())

fgetc("fichier");
C'est fichier et non "fichier".

Note : pourquoi utiliser la variable MotSecret2 ? Inutile.
0