j'aimerais savoir pourquoi ce programme fait n'importe quoi. le programme complet:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include "main.h"
int main()
{
/*Variables*/
char mot_cache[]="MARBRE";
char mot_secret[]="******";
int longueur_mot=0;
char lettre=0;
int i=0,coup=10,lettres_trouvees[6]={0};
/*intro*/
printf("bienvenue dans le jeu du pendue!\n");
printf("Je vais vous donner un mot cache que vous allez essayer de trouver,\n");
printf("Bonne chance<3\n");
printf("NB: toute les lettre sont en majuscule!\n\n");
longueur_mot=strlen(mot_cache);
printf("le mot cache en %d lettres est: %s \n",longueur_mot,mot_secret);
/*====================le jeu======================*/
while((coup>0)&&(strcmp(mot_cache,mot_secret)!=0 ))
{
printf("\nil vous rest %d coup\n",coup);
printf("quel est le mot?, %s\n",mot_secret);
/*getting letter*/
printf("donner une lettre:");
lettre = lirecaractere();
/*function*/
if (lettersearch(lettre,mot_cache,lettres_trouvees))
{
for(i=0;i<longueur_mot;i++)
{
printf(";%d;",lettres_trouvees[i]);
}
for(i=0;i<longueur_mot;i++)
{
if (lettres_trouvees[i])
{
mot_secret[i]=mot_cache[i];
}
}
}else coup--;
}
return 0;
}
/*lecture de caractere*/
char lirecaractere()
{
char caractere = 0;
caractere = getchar(); // On lit le premier caractère
caractere = toupper(caractere); // On met la lettre en majuscule si elle ne l'est pas déjà
// On lit les autres caractères mémorisés un à un jusqu'au \n (pour les effacer)
while (getchar() != '\n') ;
return caractere; // On retourne le premier caractère qu'on a lu
}
/*recherche de caractere*/
int lettersearch(char lettre,char mot_cache[],int lettres_trouvees[])
{
int i=0,bonne_lettre=0;
for (i=0;mot_cache[i]!='\n';i++)
{
if (lettre==mot_cache[i])
{
lettres_trouvees[i]=1;
bonne_lettre=1;
}
}
return bonne_lettre;
}
d'ou je pense que l'erreur vien:
if (lettres_trouvees[i])
{
mot_secret[i]=mot_cache[i];
}
et enfin un l'erreur:
merci de répondre.
..
Detected language : French
- Edité par larbibenmoussa 27 juin 2020 à 15:40:48
ligne 19, tu cherches un hypothétique caractère '\n' qui terminerait ton mot, tu as dû confondre avec '\0'. Ce traitement bien au-delà de la fin de la chaîne doit faire de sérieux dégâts en mémoire.
A vrai dire ce n'est pas une bonne pratique de mettre ta fonction main dans un header. En effet, tu veux qu'elle ne soit accessible que à partir d'un seul endroit, ce doit être le squelette de ton programme, donc la mettre dans un header n'est pas utile car tu ne l’appelleras nul part dans ton code.
Ensuite, peux tu expliquer plus en détail ce que tu entends par n'importe quoi ?
Et pour finir, quand une fonction ne prend pas d'argument en C, n'hésites pas à mettre (void) dans les parenthèses, en effet,
int main (void)
En effet en C, si tu ne précises pas void, cela ne signifie pas que ta fonction ne prend pas d'argument, mais qu'elle en prend un nombre indéfini, de type indéfini, ce qui peut poser de gros problèmes de sécurité.
“Any fool can write code that a computer can understand.
Good programmers write code that humans can understand.” -- Martin Fowler
A vrai dire ce n'est pas une bonne pratique de mettre ta fonction main dans un header. En effet, tu veux qu'elle ne soit accessible que à partir d'un seul endroit, ce doit être le squelette de ton programme, donc la mettre dans un header n'est pas utile car tu ne l’appelleras nul part dans ton code.
Ensuite, peux tu expliquer plus en détail ce que tu entends par n'importe quoi ?
Et pour finir, quand une fonction ne prend pas d'argument en C, n'hésites pas à mettre (void) dans les parenthèses, en effet,
int main (void)
En effet en C, si tu ne précises pas void, cela ne signifie pas que ta fonction ne prend pas d'argument, mais qu'elle en prend un nombre indéfini, de type indéfini, ce qui peut poser de gros problèmes de sécurité.
par n'importe quoi je parler des smiley qui s'affiche .et pour le main.h ce n'est pas ma fonction principal c un header de mon programme principal main.c je c je suis pas très imaginatif en nomination mais bon .
ligne 19, tu cherches un hypothétique caractère '\n' qui terminerait ton mot, tu as dû confondre avec '\0'. Ce traitement bien au-delà de la fin de la chaîne doit faire de sérieux dégâts en mémoire.
C'est pour ça qu'il ne faut pas que tu perdes de temps, ce qui va être le cas si tu attends qu'on te fasse tes 39 exercices ici.
Comme tu es passionné de programmation de jeux videos, ça ne devrait pas être difficile.
Si tu as des problèmes avec un exercice particulier, tu nous montres le code de ce que tu as fait, et une description du problème rencontré. Là on pourra t'aider.
Quelqu'un connaît-il la fable du Lièvre et de la Tortue? Ou bien c'est la Cigale et la Fourmi?
- Edité par PierrotLeFou 30 juin 2020 à 23:49:33
Le Tout est souvent plus grand que la somme de ses parties.
apprenez a programmer en c
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
En recherche d'emploi.
“Any fool can write code that a computer can understand.
Good programmers write code that humans can understand.” -- Martin Fowler
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Pigeon
Pigeon
Le Tout est souvent plus grand que la somme de ses parties.