Probleme avec getch (C)
Résolu
bassistar
-
bassistar -
bassistar -
Salut la communauté :) , bon je suis entrain de développer un petit programme en C servant a saisir un mot de passe de l'utilisateur sous forme d'étoiles (*) , j'ai utilisé la boucle suivante :
do
{ch1[i]=getch();
printf("*");
i++;}
while (ch1[i-1] != '\r');
mais lors de l'affichage du contenu de ch1 avec printf , ça me sort un nombre d'une grande valeur o_O ; un certain 2293552 qui est bizarrement constant même si ce n'est pas le même mot de passe tapé !
J'attends vos réponses , merci .
do
{ch1[i]=getch();
printf("*");
i++;}
while (ch1[i-1] != '\r');
mais lors de l'affichage du contenu de ch1 avec printf , ça me sort un nombre d'une grande valeur o_O ; un certain 2293552 qui est bizarrement constant même si ce n'est pas le même mot de passe tapé !
J'attends vos réponses , merci .
A voir également:
- Getch linux
- Linux reader - Télécharger - Stockage
- Toutou linux - Télécharger - Systèmes d'exploitation
- Backtrack linux - Télécharger - Sécurité
- R-linux - Télécharger - Sauvegarde
- Linux mint 22.1 - Accueil - Linux
7 réponses
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
je viens d'ajouter la ligne suivante avant le printf :
ch1[strlen(ch1)]='\0';
mais toujours le même problème :/
ch1[strlen(ch1)]='\0';
mais toujours le même problème :/
strlen(ch1), tu peux pas l'utiliser puisqu'il n'y a pas encore de \0.
Il faut le faire à la mano.
La meilleure place est en dehors du while. Tu détectes que l'utilisateur a cliqué sur '\r'. Tu mets donc un '\0' juste après.
Et il faudrait aussi penser à vérifier que l'utilisateur n'a pas appuyé sur plus de 19 caractères.
Il faut le faire à la mano.
La meilleure place est en dehors du while. Tu détectes que l'utilisateur a cliqué sur '\r'. Tu mets donc un '\0' juste après.
Et il faudrait aussi penser à vérifier que l'utilisateur n'a pas appuyé sur plus de 19 caractères.
Ah tien , je viens de changer le ch1[strlen(ch1)] par ch(strlen(ch1)-1]) et ça affiche le mot de passe nikel :D mais il reste encore un petit problème c'est que lorsque je le compare avec une autre chaine , le compilateur les considère comme deux chaines différentes car ça m'affiche pas le message "ok".
Voici le code source :
#include <cstdlib>
#include <iostream>
#include <string.h>
#include <conio.h>
using namespace std;
int main(int argc, char *argv[])
{char ch1[20],ch2[20];
int i=0;
printf("Tapez le mot de passe : \n");
do
{ch1[i]=getch();
printf("*");
i++;}
while (ch1[i-1] != '\r');
ch1[strlen(ch1)-1]='\0';
printf("%s \n",ch1);
scanf("%s",ch2);
if (ch1==ch2)
printf("ok");
system("PAUSE");
return EXIT_SUCCESS;
}
Voici le code source :
#include <cstdlib>
#include <iostream>
#include <string.h>
#include <conio.h>
using namespace std;
int main(int argc, char *argv[])
{char ch1[20],ch2[20];
int i=0;
printf("Tapez le mot de passe : \n");
do
{ch1[i]=getch();
printf("*");
i++;}
while (ch1[i-1] != '\r');
ch1[strlen(ch1)-1]='\0';
printf("%s \n",ch1);
scanf("%s",ch2);
if (ch1==ch2)
printf("ok");
system("PAUSE");
return EXIT_SUCCESS;
}
Tu n'as pas tenu compte de ma remarque sur le strlen : tu ne peux pas l'utiliser car il n'y a pas encore de \0 à ce moment.
Mets à la place ch1[i-1]='\0'; (comme ça tu récris sur le '\r').
if(ch1==ch2); -> C'est archi faux. Tu compares deux adresses et non les contenus des tableaux. Il faut utiliser la fonction strcmp. : if (strcmp(ch1,ch2)==0)
Mets à la place ch1[i-1]='\0'; (comme ça tu récris sur le '\r').
if(ch1==ch2); -> C'est archi faux. Tu compares deux adresses et non les contenus des tableaux. Il faut utiliser la fonction strcmp. : if (strcmp(ch1,ch2)==0)