Des mecs chauds en C ?

golemservil
2021-10-15 17:36:53

Le 15 octobre 2021 à 17:35:41 :

Le 15 octobre 2021 à 17:26:45 golemservil a écrit :
je débute et je fais un pendu, j'ai réussi mais j'ai fait un truc moche :

https://image.noelshack.com/fichiers/2021/41/5/1634311572-aaa.png

en gros chaque fois que le joueur trouve une lettre, "trouveLettre" se met à 1.
et je veux que le programme dise "ok tous les trouveLettre sont à 1, le joueur a gagné"

ce que j'ai fait marche mais j'ai du tous les écrire comme un teubé, il y a pas plus simple ?

Fais deux chaînes de caractères :)
Une A avec la réponse :)
L'autre B vide, remplie par des espaces ou des "-", comme tu veux, ayant le même nombre de caractères que la réponse :)
Utilise strchr pour voir si la lettre tapée se trouve dans la réponse A :)
Occupe toi de remplacer les lettres dans la chaîne B :)
Compare les deux chaînes avec strcmp(A, B), si ça retourne 0 c'est que c'est égal, donc fin de la partie :)

Bonne journée :)

le pendu est fait et il fonctionne c'est juste la fin que je trouvais moche

SonicVideXX1
2021-10-15 17:37:01

Pourquoi tu ne fais pas une boucle while ???

RanzeCHOU
2021-10-15 17:37:14

Putain le golem qui code des pendus en C alors que tu peux faire des trucs plus productifs en HTML/CSShttps://image.noelshack.com/fichiers/2021/41/4/1634236186-3.png

tarteaucacachie
2021-10-15 17:37:18

Le 15 octobre 2021 à 17:35:21 :

Le 15 octobre 2021 à 17:33:03 :
int i;
for(i = 0; i < TAILLE_DU_TABLEAU; i++)
{
if(trouvelettre[i] != 1)
{
break;
}
else if(i == TAILLE_DU_TABLEAU - 1)
{
printf("Félicitation .......");
}
}

C'est impossible de comparer directement deux tableaux en C ? Bordel c'est chiant en fait. :(

Non tu peux pas, c'est un langage avec beaucoup de contraintes mais ça t'oblige a bien réfléchir avant de programmer.

EDIT : en fait, doit bien y'avoir des fonctions qui font ce que tu veux, mais l'intérêt c'est de programmer donc..

RoccoEstSevere
2021-10-15 17:37:48

Le 15 octobre 2021 à 17:31:56 :
Tu peux pas comparer directement deux tableaux ? Style:
if TrouveLettre == [1,1,1,1,1]:

En python je sais que c'est possible.

Avec cette solution tu es limité à des mots de cinq lettres, c'est pas top

golemservil
2021-10-15 17:38:11

Le 15 octobre 2021 à 17:35:51 :
déjà fais une boucle, les indexs dans le if ça doit te mettre la puce à l'oreille que c'est pas la bonne façon de faire.

Donc au lieu de if(trouvelettre[0] == 1 && ... )

fais :

int win = 1 // par défaut on gagne
for (i=0; i<strlen(motAChercher); ++i){
if (trouvelettre[i] != 1){
win = 0 // une lettre n'a pas été trouvée, c'est donc pas gagné.
}
}

Il y a peut-être des erreurs de syntaxe ça fait un bail que j'ai pas fait de C

merci je vais aussi m'intéresser à cette façon de faire

bsilv
2021-10-15 17:38:26

Le 15 octobre 2021 à 17:35:21 :

Le 15 octobre 2021 à 17:33:03 :
int i;
for(i = 0; i < TAILLE_DU_TABLEAU; i++)
{
if(trouvelettre[i] != 1)
{
break;
}
else if(i == TAILLE_DU_TABLEAU - 1)
{
printf("Félicitation .......");
}
}

C'est impossible de comparer directement deux tableaux en C ? Bordel c'est chiant en fait. :(

Comparer deux tableaux c'est comparer chaque élément 1 à 1, et c'est ce que fait python quand tu utilise == entre deux tableaux.

Tenydos
2021-10-15 17:38:38

Le 15 octobre 2021 à 17:35:51 coolshoeshine a écrit :
déjà fais une boucle, les indexs dans le if ça doit te mettre la puce à l'oreille que c'est pas la bonne façon de faire.

Donc au lieu de if(trouvelettre[0] == 1 && ... )

fais :

int win = 1 // par défaut on gagne
for (i=0; i<strlen(motAChercher); ++i){
if (trouvelettre[i] != 1){
win = 0 // une lettre n'a pas été trouvée, c'est donc pas gagné.
}
}

Il y a peut-être des erreurs de syntaxe ça fait un bail que j'ai pas fait de C

(les points-virgules à la fin des instructions :o)) mais pareil j'en fait très rarement)

Demonciel
2021-10-15 17:38:40

Le 15 octobre 2021 à 17:37:18 :

Le 15 octobre 2021 à 17:35:21 :

Le 15 octobre 2021 à 17:33:03 :
int i;
for(i = 0; i < TAILLE_DU_TABLEAU; i++)
{
if(trouvelettre[i] != 1)
{
break;
}
else if(i == TAILLE_DU_TABLEAU - 1)
{
printf("Félicitation .......");
}
}

C'est impossible de comparer directement deux tableaux en C ? Bordel c'est chiant en fait. :(

Non tu peux pas, c'est un langage avec beaucoup de contraintes mais ça t'oblige a bien réfléchir avant de programmer.

C'est sûrement pour ça que je préfère Python.https://image.noelshack.com/fichiers/2018/10/1/1520256134-risitasue2.png

PuceauDeLatome
2021-10-15 17:39:13

Le 15 octobre 2021 à 17:35:21 :

Le 15 octobre 2021 à 17:33:03 :
int i;
for(i = 0; i < TAILLE_DU_TABLEAU; i++)
{
if(trouvelettre[i] != 1)
{
break;
}
else if(i == TAILLE_DU_TABLEAU - 1)
{
printf("Félicitation .......");
}
}

C'est impossible de comparer directement deux tableaux en C ? Bordel c'est chiant en fait. :(

Si, utilise memcmphttps://image.noelshack.com/fichiers/2019/01/3/1546468106-cr7-miroir-zoom.png
https://www.cplusplus.com/reference/cstring/memcmp/

Fistacle
2021-10-15 17:39:14

Le 15 octobre 2021 à 17:36:53 golemservil a écrit :

Le 15 octobre 2021 à 17:35:41 :

Le 15 octobre 2021 à 17:26:45 golemservil a écrit :
je débute et je fais un pendu, j'ai réussi mais j'ai fait un truc moche :

https://image.noelshack.com/fichiers/2021/41/5/1634311572-aaa.png

en gros chaque fois que le joueur trouve une lettre, "trouveLettre" se met à 1.
et je veux que le programme dise "ok tous les trouveLettre sont à 1, le joueur a gagné"

ce que j'ai fait marche mais j'ai du tous les écrire comme un teubé, il y a pas plus simple ?

Fais deux chaînes de caractères :)
Une A avec la réponse :)
L'autre B vide, remplie par des espaces ou des "-", comme tu veux, ayant le même nombre de caractères que la réponse :)
Utilise strchr pour voir si la lettre tapée se trouve dans la réponse A :)
Occupe toi de remplacer les lettres dans la chaîne B :)
Compare les deux chaînes avec strcmp(A, B), si ça retourne 0 c'est que c'est égal, donc fin de la partie :)

Bonne journée :)

le pendu est fait et il fonctionne c'est juste la fin que je trouvais moche

Refais-le plus propre alors khey :)
Avec cette boucle :)

while (strcmp(entree, reponse)) { /* ... */ }

golemservil
2021-10-15 17:40:40

Le 15 octobre 2021 à 17:39:14 :

Le 15 octobre 2021 à 17:36:53 golemservil a écrit :

Le 15 octobre 2021 à 17:35:41 :

Le 15 octobre 2021 à 17:26:45 golemservil a écrit :
je débute et je fais un pendu, j'ai réussi mais j'ai fait un truc moche :

https://image.noelshack.com/fichiers/2021/41/5/1634311572-aaa.png

en gros chaque fois que le joueur trouve une lettre, "trouveLettre" se met à 1.
et je veux que le programme dise "ok tous les trouveLettre sont à 1, le joueur a gagné"

ce que j'ai fait marche mais j'ai du tous les écrire comme un teubé, il y a pas plus simple ?

Fais deux chaînes de caractères :)
Une A avec la réponse :)
L'autre B vide, remplie par des espaces ou des "-", comme tu veux, ayant le même nombre de caractères que la réponse :)
Utilise strchr pour voir si la lettre tapée se trouve dans la réponse A :)
Occupe toi de remplacer les lettres dans la chaîne B :)
Compare les deux chaînes avec strcmp(A, B), si ça retourne 0 c'est que c'est égal, donc fin de la partie :)

Bonne journée :)

le pendu est fait et il fonctionne c'est juste la fin que je trouvais moche

Refais-le plus propre alors khey :)
Avec cette boucle :)

while (strcmp(entree, reponse)) { /* ... */ }

J'ai test avec strchr et strcmp au début et ça marchait niquel SAUF pour la condition de victoire ma comparaison de string ne fonctionnait jamais.. Il faudrait que je réessaye

PuceauDeLatome
2021-10-15 17:41:49

D'ailleurs tu devrais te servir de ces functions https://www.cplusplus.com/reference/cstring/

coolshoeshine
2021-10-15 17:44:02

Le 15 octobre 2021 à 17:38:38 :

Le 15 octobre 2021 à 17:35:51 coolshoeshine a écrit :
déjà fais une boucle, les indexs dans le if ça doit te mettre la puce à l'oreille que c'est pas la bonne façon de faire.

Donc au lieu de if(trouvelettre[0] == 1 && ... )

fais :

int win = 1 // par défaut on gagne
for (i=0; i<strlen(motAChercher); ++i){
if (trouvelettre[i] != 1){
win = 0 // une lettre n'a pas été trouvée, c'est donc pas gagné.
}
}

Il y a peut-être des erreurs de syntaxe ça fait un bail que j'ai pas fait de C

(les points-virgules à la fin des instructions :o)) mais pareil j'en fait très rarement)

désolé je bouffe du python et du js à la pelle en ce moment, j'ai perdu l'habitude :hap:

golemservil
2021-10-15 17:45:10

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include "pendu.h"

static int i = 0;

int main()
{

char maLettre = 0;
char motSecret[] = "MARRON";
int trouveLettre[6] = {0};
int Vies = 10;

printf("\t\t---Bienvenue dans le jeu du pendu---\n\t ---Tu as 10 essais pour trouver le mot mystere---\n\n\n");



while(Vies > 0)
{
printf("Il te reste %d coups a jouer \n\n\t", Vies);


for (i=0;i<6;i++)
{
if(trouveLettre[i]== 1)
{
printf("%c", motSecret[i]);
}
else
{
printf("*");
}
}

printf("\n\nChoisis une lettre : \n");
maLettre = lireCaractere();
printf("Tu as choisis la lettre %c...", maLettre);



if (!chercheLettre (maLettre,motSecret,trouveLettre))
{
Vies--;
}



for(i = 0; i < 6; i++)
{
if(trouveLettre[i] != 1)
{
break;
}
else if(i == 6 - 1)
{
printf("\nFelicitations la partie est gagnee !! \n");
}
}


}

return 0;
}

Pour les curieux

coolshoeshine
2021-10-15 17:49:17

Le problème de ton programme c'est qu'il ne fonctionne que pour les mots dont la longueur est de 6 lettres. Maintenant go faire un programme qui fonctionne pour toute taille de mot. (strlen et malloc sont tes amis)

golemservil
2021-10-15 17:51:55

Le 15 octobre 2021 à 17:49:17 :
Le problème de ton programme c'est qu'il ne fonctionne que pour les mots dont la longueur est de 6 lettres. Maintenant go faire un programme qui fonctionne pour toute taille de mot. (strlen et malloc sont tes amis)

oui c'est ce qui est prévu pour la suite :hap: en piochant dans un dictionnaire de mots

whitesmoke
2021-10-15 17:59:02

Oui le plus simple est de d'implémenter une fonction qui prend en paramètre deux string (qui sont en soit des tableaux de caractère en c) et dedans tu boucle sur l'input en paramètre et tu retourne une valeur -1 dans le cas où la valeur n'est pas la bonne. (tu peux le faire très simplement/proprement avec les pointeurs). La c'est vraiment si tu veux faire quelque chose d'optimiser sans utiliser de librairies (l'idée est de comprendre ce que tu fais, c'est pour ça que je t'aurais même déconseiller l'utilisation de printf) et dans le cas ou tu veux utiliser des librairies, il y a des fonctions toute prête qui te permettront de réaliser ce dont tu as besoin.

Tenydos
2021-10-15 17:59:19

Petit raccourci souvent utile en C (vu que c'est rare que le langage nous mâche le travail) :d)


for (i = 0; i < 6; i++) {
printf("%c", (trouveLettre[i] == 1 ? motSecret[i] : "*");
}

Dans certains cas je trouve que c'est plus lisible

L'opérateur ternaire ( expr_boolean ? expr_si_vrai : expr_si_faux) n'évalue pas l'expression qui n'est pas retenu (de mémoire)

Infos
Gestion du forum

contact@geevey.com

API disponible. Utilisez le paramètre "api" en GET, peu importe le contenu, sur une page du site.

Notes

    Partenaire: JVFlux
    Ce site n'est pas associé à Jeuxvideo.com ou Webedia. Nous utilisons seulement des archives publiques.
    Il est inutile de me spammer par e-mail pour supprimer un topic. Au contraire, en conséquence, je mettrais votre topic dans le bloc ci-dessous.
Non-assumage
    Personne n'a pas assumé de topic pour le moment.