Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 27/04/2021, à 13:38

zephyre123

Comment débuguer un programme exemple le pendu

Bonjour,

Voici le code de mon programme, un simple pendu avec un mot secret codé en dur.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>




int main(void)
{
	char mot_secret[] = "Bonjour";
	int taille = strlen(mot_secret);
	char mot_rentrer_par_utilisateur[taille + 1]; //+1 => reservation '\0' (carac fin chaine)
	int nombre_vie = 10;
	char lettre_utilisateur;

	// Initialisation du mot rentrer par l'utilisateur
	// ==================================================================================
	for (int i = 0; i < taille; i++)
		mot_rentrer_par_utilisateur[i] = '_';

	mot_rentrer_par_utilisateur[taille + 1] = '\0';
	// ==================================================================================

	do
	{
		// Lire la donnée utilisateur
		// ==========================================================================
		printf("Entrer une lettre majuscule ou minuscule ?\n");
		fflush(stdin);
		scanf("%c", &lettre_utilisateur);
		// ==========================================================================

		// Vérification de la saisie utilisateur
		// ==========================================================================
		bool presence_lettre = false;
		for (int i = 0; i < taille; i++)
		{
			if (mot_secret[i] == lettre_utilisateur)
			{
				presence_lettre = true;
				mot_rentrer_par_utilisateur[i] = lettre_utilisateur;
			}

		}
		// ==========================================================================

		// Affichage en fonction de la présence de la lettre
		// ==========================================================================
		if (presence_lettre == true)
			printf("Votre lettre : %c est bien présente dans le mot : \"%s\"\n", lettre_utilisateur, mot_rentrer_par_utilisateur);

		else
		{
			nombre_vie--;
			printf("Votre lettre n'est pas présente, il vous reste %d vie\n", nombre_vie);
		}
		// ==========================================================================

		// Test de la victoire
		// ==========================================================================
		if (strcmp(mot_secret, mot_rentrer_par_utilisateur) == 0)
		{
			printf("vous avez trouvé le mot : \"%s\"", mot_secret);
			break;
		}
		// ==========================================================================

	} while (nombre_vie > 0);

	// Affichage lorsque plus de vie
	// ==========================================================================
	if (nombre_vie == 0)
		printf("Vous n'avez pas trouvez le mot : \"%s\"", mot_secret);
	// ==========================================================================

	return 0;
}

J'aimerai trouver l'erreur dans mon programme en le lançant pas à pas et observer la variable booléenne = presence_lettre car je ne comprends pas pourquoi lorsque j'exécute le programme j'ai ceci pour la première lettre, il me retire une vie !
J'ai le sentiment que c'est la fonction scanf qui fou la merde, pourtant j'ai pensé à vider le buffer avec la fonction fflush donc j'en sais rien !
Plus d'une heure je suis dessus pour trouver l'erreur j'en ai ras le cul, de la merde l'informatique vraiment de la merde !

./main.exe 
Entrer une lettre majuscule ou minuscule ?
B
Votre lettre : B est bien présente dans le mot : "B______"
Entrer une lettre majuscule ou minuscule ?
Votre lettre n'est pas présente, il vous reste 9 vie
Entrer une lettre majuscule ou minuscule ?

Dernière modification par zephyre123 (Le 27/04/2021, à 13:47)

Hors ligne

#2 Le 27/04/2021, à 14:05

grigouille

Re : Comment débuguer un programme exemple le pendu

zephyre123 a écrit :

Bonjour,

	char mot_rentrer_par_utilisateur[taille + 1]; //+1 => reservation '\0' (carac fin chaine)
	mot_rentrer_par_utilisateur[taille + 1] = '\0';

C'est très suspect cette affectation.


Debian (xfce) 12
HP LaserJet M1132 MFP

Hors ligne

#3 Le 27/04/2021, à 14:07

grigouille

Re : Comment débuguer un programme exemple le pendu

zephyre123 a écrit :
		if (presence_lettre == true)

As-tu bien compris ce qu'est un booléen ?


Debian (xfce) 12
HP LaserJet M1132 MFP

Hors ligne

#4 Le 27/04/2021, à 14:08

zephyre123

Re : Comment débuguer un programme exemple le pendu

En ajoutant des printf dans le code pour observer la valeur du booleen = presence_lettre
Je comprends rien comme ça se fait que mon booleen passe à false alors que je rentre la lettre 'B' presente dans le mot secret = "Bonjour"
Le code ci dessous :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>




int main(void)
{
	char mot_secret[] = "Bonjour";
	int taille = strlen(mot_secret);
	char mot_rentrer_par_utilisateur[taille + 1]; //+1 => reservation '\0' (carac fin chaine)
	int nombre_vie = 10;
	char lettre_utilisateur;

	// Initialisation du mot rentrer par l'utilisateur
	// ==================================================================================
	for (int i = 0; i < taille; i++)
		mot_rentrer_par_utilisateur[i] = '_';

	mot_rentrer_par_utilisateur[taille + 1] = '\0';
	// ==================================================================================

	do
	{
		// Lire la donnée utilisateur
		// ==========================================================================
		printf("Entrer une lettre majuscule ou minuscule ?\n");
		fflush(stdin);
		scanf("%c", &lettre_utilisateur);
		// ==========================================================================

		// Vérification de la saisie utilisateur
		// ==========================================================================
		bool presence_lettre = false;
		for (int i = 0; i < taille; i++)
		{
			if (mot_secret[i] == lettre_utilisateur)
			{
				presence_lettre = true;
				mot_rentrer_par_utilisateur[i] = lettre_utilisateur;
				printf("Valeur presence = %d\n", presence_lettre);
			}

		}
		// ==========================================================================

		// Affichage en fonction de la présence de la lettre
		// ==========================================================================
		if (presence_lettre == true)
		{
			printf("Votre lettre : %c est bien présente dans le mot : \"%s\"\n", lettre_utilisateur, mot_rentrer_par_utilisateur);

			printf("Valeur presence = %d\n", presence_lettre);
		}
		

		else
		{
			nombre_vie--;
			printf("Votre lettre n'est pas présente, il vous reste %d vie\n", nombre_vie);
			printf("Valeur presence = %d\n", presence_lettre);
		}
		// ==========================================================================

		// Test de la victoire
		// ==========================================================================
		if (strcmp(mot_secret, mot_rentrer_par_utilisateur) == 0)
		{
			printf("vous avez trouvé le mot : \"%s\"", mot_secret);
			break;
		}
		// ==========================================================================

	} while (nombre_vie > 0);

	// Affichage lorsque plus de vie
	// ==========================================================================
	if (nombre_vie == 0)
		printf("Vous n'avez pas trouvez le mot : \"%s\"", mot_secret);
	// ==========================================================================

	return 0;
}

Hors ligne

#5 Le 27/04/2021, à 14:10

zephyre123

Re : Comment débuguer un programme exemple le pendu

grigrouille a écrit :

As-tu bien compris ce qu'est un booléen ?

Bas je teste simplement si la valeur de mon booleen vaut true c'est pas ça ?
Y a deux valeurs possibles pour un booleen 1 (true) et 0 (false).

Hors ligne

#6 Le 27/04/2021, à 14:12

grigouille

Re : Comment débuguer un programme exemple le pendu

Il suffit d'écrire

if (presence_lettre)

Debian (xfce) 12
HP LaserJet M1132 MFP

Hors ligne

#7 Le 27/04/2021, à 14:13

grigouille

Re : Comment débuguer un programme exemple le pendu

Il faut sortir de la boucle quand presence_lettre passe à true


Debian (xfce) 12
HP LaserJet M1132 MFP

Hors ligne

#8 Le 27/04/2021, à 14:32

zephyre123

Re : Comment débuguer un programme exemple le pendu

Ca ne change rien grigouille j'ai testé, c'est exactement la même merde, le code ci dessous :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>

int main(void)
{
	char mot_secret[] = "Bonjour";
	int taille = strlen(mot_secret);
	char mot_rentrer_par_utilisateur[taille + 1]; //+1 => reservation '\0' (carac fin chaine)
	int nombre_vie = 10;
	char lettre_utilisateur;

	// Initialisation du mot rentrer par l'utilisateur
	// ==================================================================================
	for (int i = 0; i < taille; i++)
		mot_rentrer_par_utilisateur[i] = '_';

	mot_rentrer_par_utilisateur[taille + 1] = '\0';
	// ==================================================================================

	do
	{
		// Lire la donnée utilisateur
		// ==========================================================================
		printf("Entrer une lettre majuscule ou minuscule ?\n");
		fflush(stdin);
		scanf("%c", &lettre_utilisateur);
		// ==========================================================================

		// Vérification de la saisie utilisateur
		// ==========================================================================
		bool presence_lettre = false;
		for (int i = 0; i < taille; i++)
		{
			if (mot_secret[i] == lettre_utilisateur)
			{
				presence_lettre = true;
				mot_rentrer_par_utilisateur[i] = lettre_utilisateur;
				printf("Valeur presence = %d\n", presence_lettre);
			}

		}
		// ==========================================================================

		// Affichage en fonction de la présence de la lettre
		// ==========================================================================
		if (presence_lettre) // CORRECTION grigoulle
		{
			printf("Votre lettre : %c est bien présente dans le mot : \"%s\"\n", lettre_utilisateur, mot_rentrer_par_utilisateur);

			printf("Valeur presence = %d\n", presence_lettre);
		}
		

		else
		{
			nombre_vie--;
			printf("Votre lettre n'est pas présente, il vous reste %d vie\n", nombre_vie);
			printf("Valeur presence = %d\n", presence_lettre);
		}
		// ==========================================================================

		// Test de la victoire
		// ==========================================================================
		if (strcmp(mot_secret, mot_rentrer_par_utilisateur) == 0)
		{
			printf("vous avez trouvé le mot : \"%s\"", mot_secret);
			break;
		}
		// ==========================================================================

	} while (nombre_vie > 0);

	// Affichage lorsque plus de vie
	// ==========================================================================
	if (nombre_vie == 0)
		printf("Vous n'avez pas trouvez le mot : \"%s\"", mot_secret);
	// ==========================================================================

	return 0;
}

Hors ligne

#9 Le 27/04/2021, à 14:33

grigouille

Re : Comment débuguer un programme exemple le pendu

grigouille a écrit :

Il faut sortir de la boucle quand presence_lettre passe à true


Debian (xfce) 12
HP LaserJet M1132 MFP

Hors ligne

#10 Le 27/04/2021, à 14:39

Nuliel

Re : Comment débuguer un programme exemple le pendu

Quelques petits conseils pour debug du C:
- compiler avec les paramètres -Wall -Wextra -g afin d'avoir plus de warning qui te seront très utiles afin de pouvoir débuguer avec gdb (ou gdb-peda, perso j'utilise soit gdb-peda soit le débugueur de vscode) et ainsi voir étape par étape l'état des variables
- une fois les warning corrigés, tu peux passer ton programme dans valgrind avec

valgrind ./prog

si ton programme s'appelle prog.
- il existe aussi les sanitizers avec gcc mais là c'est peut être overkill dans ce cas

Néanmoins tous ces outils sont utiles pour corriger les bugs, pas les erreurs de logique.

Dernière modification par Nuliel (Le 27/04/2021, à 14:40)

Hors ligne

#11 Le 27/04/2021, à 15:04

zephyre123

Re : Comment débuguer un programme exemple le pendu

grigoulle a écrit :

Il faut sortir de la boucle quand presence_lettre passe à true

Mais je ne veux pas sortir de ma boucle do while lorsque je trouve une lettre qui colle c'est pas bon ça grirouille !
J'ai testé et c'est exactement ce à quoi je m'attendais des que  je rentre une lettre qui corresponds à mot secret le programme s'arrête et c'est pas ce que je veux !
Le code ci dessous avec une sortie de boucle dans le if (lettre_presente)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>

int main(void)
{
	char mot_secret[] = "Bonjour";
	int taille = strlen(mot_secret);
	char mot_rentrer_par_utilisateur[taille + 1]; //+1 => reservation '\0' (carac fin chaine)
	int nombre_vie = 10;
	char lettre_utilisateur;

	// Initialisation du mot rentrer par l'utilisateur
	// ==================================================================================
	for (int i = 0; i < taille; i++)
		mot_rentrer_par_utilisateur[i] = '_';

	mot_rentrer_par_utilisateur[taille + 1] = '\0';
	// ==================================================================================

	do
	{
		// Lire la donnée utilisateur
		// ==========================================================================
		printf("Entrer une lettre majuscule ou minuscule ?\n");
		fflush(stdin);
		scanf("%c", &lettre_utilisateur);
		// ==========================================================================

		// Vérification de la saisie utilisateur
		// ==========================================================================
		bool presence_lettre = false;
		for (int i = 0; i < taille; i++)
		{
			if (mot_secret[i] == lettre_utilisateur)
			{
				presence_lettre = true;
				mot_rentrer_par_utilisateur[i] = lettre_utilisateur;
			}

		}
		// ==========================================================================

		// Affichage en fonction de la présence de la lettre
		// ==========================================================================
		if (presence_lettre)
		{
			printf("Votre lettre : %c est bien présente dans le mot : \"%s\"\n", lettre_utilisateur, mot_rentrer_par_utilisateur);

			break; // CORRECTION Grigouille
		}
		

		else
		{
			nombre_vie--;
			printf("Votre lettre n'est pas présente, il vous reste %d vie\n", nombre_vie);
		}
		// ==========================================================================

		// Test de la victoire
		// ==========================================================================
		if (strcmp(mot_secret, mot_rentrer_par_utilisateur) == 0)
		{
			printf("vous avez trouvé le mot : \"%s\"", mot_secret);
			break;
		}
		// ==========================================================================

	} while (nombre_vie > 0);

	// Affichage lorsque plus de vie
	// ==========================================================================
	if (nombre_vie == 0)
		printf("Vous n'avez pas trouvez le mot : \"%s\"", mot_secret);
	// ==========================================================================

	return 0;
}

Hors ligne

#12 Le 27/04/2021, à 15:28

grigouille

Re : Comment débuguer un programme exemple le pendu

Ok, j'ai tords pour le break.

Par contre, j'ai l'impression que le programme lit le caractère et lit aussi le retour à la ligne.

Il faut que tu revois la saisie. Utilise fgets peut-être.


Debian (xfce) 12
HP LaserJet M1132 MFP

Hors ligne

#13 Le 27/04/2021, à 15:29

grigouille

Re : Comment débuguer un programme exemple le pendu

$ ./test
Entrer une lettre majuscule ou minuscule ?
abc
Votre lettre n'est pas présente, il vous reste 9 vie
Entrer une lettre majuscule ou minuscule ?
Votre lettre n'est pas présente, il vous reste 8 vie
Entrer une lettre majuscule ou minuscule ?
Votre lettre n'est pas présente, il vous reste 7 vie
Entrer une lettre majuscule ou minuscule ?
Votre lettre n'est pas présente, il vous reste 6 vie
Entrer une lettre majuscule ou minuscule ?

C'est clair : j'ai rentré 4 caractères : "abc\n"


Debian (xfce) 12
HP LaserJet M1132 MFP

Hors ligne

#14 Le 27/04/2021, à 15:53

zephyre123

Re : Comment débuguer un programme exemple le pendu

Mais normalement la fonction scanf("%c", lettre_utilisateur) ne peux saisir que UN SEUL caractère.
La fonction scanf considère que les blank caracteres (espace ou tabulation ou caractere fin de ligne) comme des séparateurs et mets fin à la saisie.
Es ce que quelqu'un à une idée car la je patauge ...
Je ne vois vraiment pas ce qui cloche dans l'algorithme, une idée ?

Dernière modification par zephyre123 (Le 27/04/2021, à 15:54)

Hors ligne

#15 Le 27/04/2021, à 16:03

grigouille

Re : Comment débuguer un programme exemple le pendu

C'est bien ce qu'elle fait : elle lit un seul caractère.


Debian (xfce) 12
HP LaserJet M1132 MFP

Hors ligne

#16 Le 27/04/2021, à 16:49

zephyre123

Re : Comment débuguer un programme exemple le pendu

grigouille a écrit :

C'est bien ce qu'elle fait : elle lit un seul caractère

Bas justement si la fonction scanf ne lit qu'un seul caractère alors je ne vois aucune erreur dans ce programme (logique)

Hors ligne

#17 Le 27/04/2021, à 16:57

grigouille

Re : Comment débuguer un programme exemple le pendu

Tu dois ignorer le "retour à la ligne". Mieux : tu ne dois accepter que les caractères alphabétiques. De plus, il faut être insensible à la casse.


Debian (xfce) 12
HP LaserJet M1132 MFP

Hors ligne

#18 Le 27/04/2021, à 18:18

zephyre123

Re : Comment débuguer un programme exemple le pendu

non mais grigoulle je ne vais pas me lancer dans autre chose tant que je n'ai pas résolu ce problème.
Y a pas une personne qui a une idée de pourquoi ce programme ne fonctionne pas ?

Hors ligne

#19 Le 27/04/2021, à 20:27

Amiralgaby

Re : Comment débuguer un programme exemple le pendu

scanf("%c", &lettre_utilisateur);
scanf("%*c");

Dernière modification par Amiralgaby (Le 27/04/2021, à 20:27)


Vive la communauté du Libre !!!

Hors ligne

#20 Le 27/04/2021, à 20:28

grigouille

Re : Comment débuguer un programme exemple le pendu

Il fonctionne ton programme après quelques modifications :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <ctype.h>

int main(void)
{
	char mot_secret[] = "BONJOUR";
	int taille = strlen(mot_secret);
	char mot_rentrer_par_utilisateur[taille + 1]; //+1 => reservation '\0' (carac fin chaine)
	int nombre_vie = 10;
	char lettre_utilisateur;

	// Initialisation du mot rentrer par l'utilisateur
	// ==================================================================================
	for (int i = 0; i < taille; i++)
		mot_rentrer_par_utilisateur[i] = '_';

	mot_rentrer_par_utilisateur[taille] = '\0';
	// ==================================================================================

	do
	{
		// Lire la donnée utilisateur
		// ==========================================================================
		printf("Entrer une lettre majuscule ou minuscule ?\n");
		do {
			scanf("%c", &lettre_utilisateur);
			lettre_utilisateur = toupper(lettre_utilisateur);
		} while(!isalpha(lettre_utilisateur));
		// ==========================================================================

		// Vérification de la saisie utilisateur
		// ==========================================================================
		bool presence_lettre = false;
		for (int i = 0; i < taille; i++)
		{
			if (mot_secret[i] == lettre_utilisateur)
			{
				presence_lettre = true;
				mot_rentrer_par_utilisateur[i] = lettre_utilisateur;
			}

		}
		// ==========================================================================

		// Affichage en fonction de la présence de la lettre
		// ==========================================================================
		if (presence_lettre)
		{
			printf("Votre lettre : %c est bien présente dans le mot : \"%s\"\n", lettre_utilisateur, mot_rentrer_par_utilisateur);
		}
		else
		{
			nombre_vie--;
			printf("Votre lettre %c n'est pas présente, il vous reste %d vie\n", lettre_utilisateur, nombre_vie);
		}
		// ==========================================================================

		// Test de la victoire
		// ==========================================================================
		if (strcmp(mot_secret, mot_rentrer_par_utilisateur) == 0)
		{
			printf("vous avez trouvé le mot : \"%s\"", mot_secret);
			break;
		}
		// ==========================================================================

	} while (nombre_vie > 0);

	// Affichage lorsque plus de vie
	// ==========================================================================
	if (nombre_vie == 0)
		printf("Vous n'avez pas trouvez le mot : \"%s\"", mot_secret);
	// ==========================================================================

	return 0;
}
$ ./test
Entrer une lettre majuscule ou minuscule ?
qlkjg
Votre lettre Q n'est pas présente, il vous reste 9 vie
Entrer une lettre majuscule ou minuscule ?
Votre lettre L n'est pas présente, il vous reste 8 vie
Entrer une lettre majuscule ou minuscule ?
Votre lettre K n'est pas présente, il vous reste 7 vie
Entrer une lettre majuscule ou minuscule ?
Votre lettre : J est bien présente dans le mot : "___J___"
Entrer une lettre majuscule ou minuscule ?
Votre lettre G n'est pas présente, il vous reste 6 vie
Entrer une lettre majuscule ou minuscule ?
ba   j	t
Votre lettre : B est bien présente dans le mot : "B__J___"
Entrer une lettre majuscule ou minuscule ?
Votre lettre A n'est pas présente, il vous reste 5 vie
Entrer une lettre majuscule ou minuscule ?
Votre lettre : J est bien présente dans le mot : "B__J___"
Entrer une lettre majuscule ou minuscule ?
Votre lettre T n'est pas présente, il vous reste 4 vie
Entrer une lettre majuscule ou minuscule ?
r
Votre lettre : R est bien présente dans le mot : "B__J__R"
Entrer une lettre majuscule ou minuscule ?
on
Votre lettre : O est bien présente dans le mot : "BO_JO_R"
Entrer une lettre majuscule ou minuscule ?
Votre lettre : N est bien présente dans le mot : "BONJO_R"
Entrer une lettre majuscule ou minuscule ?
uu
Votre lettre : U est bien présente dans le mot : "BONJOUR"
vous avez trouvé le mot : "BONJOUR"
$ ./test
Entrer une lettre majuscule ou minuscule ?
aaaaaaaaaaaaaaaaaaaaaaaaaaa                  aaaaaaaa
Votre lettre A n'est pas présente, il vous reste 9 vie
Entrer une lettre majuscule ou minuscule ?
Votre lettre A n'est pas présente, il vous reste 8 vie
Entrer une lettre majuscule ou minuscule ?
Votre lettre A n'est pas présente, il vous reste 7 vie
Entrer une lettre majuscule ou minuscule ?
Votre lettre A n'est pas présente, il vous reste 6 vie
Entrer une lettre majuscule ou minuscule ?
Votre lettre A n'est pas présente, il vous reste 5 vie
Entrer une lettre majuscule ou minuscule ?
Votre lettre A n'est pas présente, il vous reste 4 vie
Entrer une lettre majuscule ou minuscule ?
Votre lettre A n'est pas présente, il vous reste 3 vie
Entrer une lettre majuscule ou minuscule ?
Votre lettre A n'est pas présente, il vous reste 2 vie
Entrer une lettre majuscule ou minuscule ?
Votre lettre A n'est pas présente, il vous reste 1 vie
Entrer une lettre majuscule ou minuscule ?
Votre lettre A n'est pas présente, il vous reste 0 vie
Vous n'avez pas trouvez le mot : "BONJOUR"

Debian (xfce) 12
HP LaserJet M1132 MFP

Hors ligne

#21 Le 28/04/2021, à 14:28

zephyre123

Re : Comment débuguer un programme exemple le pendu

J'ai testé vos deux solutions à Amiralgaby et à grigouille et les deux fonctionnent.
Cependant @Amiragaby je ne comprends pas pourquoi tu fais cela :

		scanf("%c", &lettre_utilisateur);
		scanf("%*c");

Peux tu me l'expliquer @Amiragaby stp ?

Et @grigouille pourquoi tu te sers de la fonction toupper.

Je ne comprends toujours pas pourquoi mon programme précédent ne fonctionne pas.
Pouvez vous m'expliquez svp :
- @Amiralgaby pourquoi il faut rajouter cette ligne = scanf("%*c");
- @grigouille pourquoi tu utilises la fonction toupper ?

En conclusion dans mon programme il n'y a aucune erreur de logique juste une mauvaise compréhension de la fonction scanf.

Dernière modification par zephyre123 (Le 28/04/2021, à 14:39)

Hors ligne

#22 Le 28/04/2021, à 14:55

grigouille

Re : Comment débuguer un programme exemple le pendu

le toupper c'est pour être insensible à la casse. L'utilisateur peut entrer "a" ou "A".
Le mot secret est en majuscule du coup.


Debian (xfce) 12
HP LaserJet M1132 MFP

Hors ligne

#23 Le 28/04/2021, à 14:58

grigouille

Re : Comment débuguer un programme exemple le pendu

man scanf :

      •      An  optional  '*'  assignment-suppression  character: scanf() reads input as directed by the conversion
              specification, but discards the input.  No corresponding pointer argument is required, and this  speci‐
              fication is not included in the count of successful assignments returned by scanf().

Merci Amiragaby pour l'info.


Debian (xfce) 12
HP LaserJet M1132 MFP

Hors ligne

#24 Le 28/04/2021, à 17:16

zephyre123

Re : Comment débuguer un programme exemple le pendu

J'ai rien compris pourquoi on doit mettre scanf("%*c") expliquez moi svp.
Je comprends pas ce qui se passe au niveau de la mémoire.
Je pense que la solution est dans cet phrase => but discard the input.
Après une recherche sur le net discard veut dire jeter, rejeter, abandonner .... https://www.wordreference.com/enfr/discard
Donc pourquoi faut couper l'input ?
Normalement après cette ligne = sanf("%c, &lettre_utililsateur) l'entré n'est pas coupé ?

Dernière modification par zephyre123 (Le 28/04/2021, à 17:25)

Hors ligne

#25 Le 28/04/2021, à 18:40

grigouille

Re : Comment débuguer un programme exemple le pendu

Non l'entrée "n'est pas coupé".

Si tu tapes "abc" + Entrée, il y aura 4 caractères dans l'entrée standard. scanf va lire ces 4 caractères les uns après les autres.


Debian (xfce) 12
HP LaserJet M1132 MFP

Hors ligne