Probleme avec getch (C)
Résolu/Fermé
A voir également:
- Getch linux
- Linux mint - Télécharger - Systèmes d'exploitation
- Diskinternals linux reader - Télécharger - Stockage
- Linux live usb creator - Télécharger - Outils Internet
- Distribution linux - Guide
- Play on linux - Télécharger - Divers Utilitaires
7 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 833
4 déc. 2011 à 14:38
4 déc. 2011 à 14:38
Par contre, tu as oublié de mettre un \0 à la fin de ta chaîne.
Du coup, le printf bug.
Du coup, le printf bug.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 833
4 déc. 2011 à 13:51
4 déc. 2011 à 13:51
Bonjour,
As-tu bien mis i=0, avant le do ?
Et comment affiches-tu ch1 avec printf ?
As-tu bien mis i=0, avant le do ?
Et comment affiches-tu ch1 avec printf ?
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 833
4 déc. 2011 à 14:22
4 déc. 2011 à 14:22
Comment a été déclaré le tableau ch ?
Cdlt,
Cdlt,
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 :/
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 833
4 déc. 2011 à 14:51
4 déc. 2011 à 14:51
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.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 833
4 déc. 2011 à 15:04
4 déc. 2011 à 15:04
Non ça ne doit pas être ça. Mais, c'est vrai que le mieux c'est de le supprimer. Cela t'aidera par la suite pour vérifier le mot de passe.
Poste ton programme avec l'initialisation de i ainsi que tous les changements que tu as fait. Tu ne dois plus être très loin maintenant.
Poste ton programme avec l'initialisation de i ainsi que tous les changements que tu as fait. Tu ne dois plus être très loin maintenant.
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;
}
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 833
4 déc. 2011 à 15:24
4 déc. 2011 à 15:24
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)