#1 Le 27/04/2021, à 12: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, à 12:47)
Hors ligne
#2 Le 27/04/2021, à 13:05
- grigouille
Re : Comment débuguer un programme exemple le pendu
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, à 13:07
- grigouille
Re : Comment débuguer un programme exemple le pendu
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, à 13: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, à 13:10
- zephyre123
Re : Comment débuguer un programme exemple le pendu
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, à 13: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, à 13: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, à 13: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, à 13:33
- 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
#10 Le 27/04/2021, à 13: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, à 13:40)
Hors ligne
#11 Le 27/04/2021, à 14:04
- zephyre123
Re : Comment débuguer un programme exemple le pendu
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, à 14: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, à 14: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, à 14: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, à 14:54)
Hors ligne
#15 Le 27/04/2021, à 15: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, à 15:49
- zephyre123
Re : Comment débuguer un programme exemple le pendu
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, à 15: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, à 17: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, à 19: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, à 19:27)
Vive la communauté du Libre !!!
Hors ligne
#20 Le 27/04/2021, à 19: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, à 13: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, à 13:39)
Hors ligne
#22 Le 28/04/2021, à 13: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, à 13: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, à 16: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, à 16:25)
Hors ligne
#25 Le 28/04/2021, à 17: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