Probleme programme en c

Fermé
yacinebosss Messages postés 157 Date d'inscription jeudi 27 décembre 2012 Statut Membre Dernière intervention 18 décembre 2021 - Modifié par yacinebosss le 27/12/2015 à 17:50
yacinebosss Messages postés 157 Date d'inscription jeudi 27 décembre 2012 Statut Membre Dernière intervention 18 décembre 2021 - 29 déc. 2015 à 17:04
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 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
27 déc. 2015 à 17:57
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 157 Date d'inscription jeudi 27 décembre 2012 Statut Membre Dernière intervention 18 décembre 2021 3
27 déc. 2015 à 18:32
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 157 Date d'inscription jeudi 27 décembre 2012 Statut Membre Dernière intervention 18 décembre 2021 3
27 déc. 2015 à 18:38
et quand j'ai écrit le même programme en utilisant juste les variable c'est faux ?
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835 > yacinebosss Messages postés 157 Date d'inscription jeudi 27 décembre 2012 Statut Membre Dernière intervention 18 décembre 2021
27 déc. 2015 à 18:48
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 157 Date d'inscription jeudi 27 décembre 2012 Statut Membre Dernière intervention 18 décembre 2021 3
27 déc. 2015 à 19:28
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 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
27 déc. 2015 à 23:22
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