Fonction pour afficher des * en C sous Linux
Résolu/Fermé
Maknash
Messages postés
643
Date d'inscription
lundi 10 septembre 2007
Statut
Membre
Dernière intervention
15 juillet 2013
-
24 mai 2009 à 22:34
pyschopathe Messages postés 1974 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 - 25 mai 2009 à 17:07
pyschopathe Messages postés 1974 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 - 25 mai 2009 à 17:07
A voir également:
- Fonction pour afficher des * en C sous Linux
- Fonction si et - Guide
- Afficher appdata - Guide
- Afficher mot de passe wifi android - Guide
- Fonction moyenne excel - Guide
- Linux mint 32 bits - Télécharger - Systèmes d'exploitation
11 réponses
ninouhhichem
Messages postés
201
Date d'inscription
jeudi 21 mai 2009
Statut
Membre
Dernière intervention
21 juin 2009
9
24 mai 2009 à 22:42
24 mai 2009 à 22:42
/*convertire le caractere entré en * a chaque saisire*/
repeat
getchar(x);
x=*;
until false
repeat
getchar(x);
x=*;
until false
Maknash
Messages postés
643
Date d'inscription
lundi 10 septembre 2007
Statut
Membre
Dernière intervention
15 juillet 2013
184
24 mai 2009 à 22:47
24 mai 2009 à 22:47
Merci mais ça ne fonctionne pas...
En plus getchar(x) on ne met jamais ça vu qu'on ne peut pas mettre de variable dans getchar...
En plus getchar(x) on ne met jamais ça vu qu'on ne peut pas mettre de variable dans getchar...
Maknash
Messages postés
643
Date d'inscription
lundi 10 septembre 2007
Statut
Membre
Dernière intervention
15 juillet 2013
184
24 mai 2009 à 23:09
24 mai 2009 à 23:09
Je viens de voir qu'on pouvait utiliser <curses.h> à la place de <myconio.h> mais quand je l'utilise ça me met ceci :
undefined reference to `stdscr`
undefined reference to `wgetch`
J'ai fais une fonction getlettre(); pour pouvoir enregistrer chaque lettre :
Où est le problème? Merci d'avance
undefined reference to `stdscr`
undefined reference to `wgetch`
J'ai fais une fonction getlettre(); pour pouvoir enregistrer chaque lettre :
char getlettre() { char car; do car=getch(); while(car!='\r'); return(car); }
Où est le problème? Merci d'avance
Maknash
Messages postés
643
Date d'inscription
lundi 10 septembre 2007
Statut
Membre
Dernière intervention
15 juillet 2013
184
25 mai 2009 à 10:33
25 mai 2009 à 10:33
J'ai trouvé avec curses.h ça fonctionne.
Seulement j'ai un autre problème :
En fait, dans mon code il ne passe pas le scanf du login je ne sais pas pourquoi.
Quelqu'un aurait une idée d'où ça pourrait venir???
Seulement j'ai un autre problème :
#include <stdio.h> #include <curses.h> char getlettre(); int main(void) { char login[20], password[20]; FILE *flux; system("clear"); scanf("%s",login); printf("Password: "); do { password[i]=getlettre(); if(password[i]!='\r') printf("*"); }while(i<20 && (password[i-1]!='\r')); } /// Fonction getlettre() pour prendre les lettres char getlettre() { char car; do car=getch(); while(car!='\r'); return(car); }
En fait, dans mon code il ne passe pas le scanf du login je ne sais pas pourquoi.
Quelqu'un aurait une idée d'où ça pourrait venir???
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Maknash
Messages postés
643
Date d'inscription
lundi 10 septembre 2007
Statut
Membre
Dernière intervention
15 juillet 2013
184
25 mai 2009 à 12:11
25 mai 2009 à 12:11
Je viens tout juste de me réveiller là lol en fait il ne faut pas que ça affiche des *, il faut que ça n'affiche absolument rien comme quand on entre le mot de passe sous Linux...
Quelqu'un aurait une idée???
Quelqu'un aurait une idée???
pyschopathe
Messages postés
1974
Date d'inscription
dimanche 2 mars 2008
Statut
Membre
Dernière intervention
22 mars 2010
135
25 mai 2009 à 12:21
25 mai 2009 à 12:21
Je sais qu'il est possible de désactiver tout retour d'affichage dans une console en C (je l'ai fait il y a quelques années), mais je ne me souviens pas du tout comment. M'enfin cherche un truc comme "désactiver la sortie standard" ou quelque chose comme ça...
Maknash
Messages postés
643
Date d'inscription
lundi 10 septembre 2007
Statut
Membre
Dernière intervention
15 juillet 2013
184
>
pyschopathe
Messages postés
1974
Date d'inscription
dimanche 2 mars 2008
Statut
Membre
Dernière intervention
22 mars 2010
25 mai 2009 à 14:13
25 mai 2009 à 14:13
Merci, je viens de regarder et j'ai trouvé ça http://www.commentcamarche.net/forum/affich 653183 dup linux c c
Seulement il met ça comme code :
Mais ça met une erreur disant que O_WRONLY et O_CREAT en sont pas déclarés, mais lui il ne les déclare pas...
Seulement il met ça comme code :
void substituer_sortie(char *fichier) { int fd; fd = open(fichier, O_WRONLY | O_CREAT, 0600); dup2(fd, 1); close(fd); }
Mais ça met une erreur disant que O_WRONLY et O_CREAT en sont pas déclarés, mais lui il ne les déclare pas...
pyschopathe
Messages postés
1974
Date d'inscription
dimanche 2 mars 2008
Statut
Membre
Dernière intervention
22 mars 2010
135
25 mai 2009 à 14:20
25 mai 2009 à 14:20
Un petit man dup2 nous informe qu'il faut inclure la bibliothèque unistd.h... Un petit
#include <unistd.h>et tout devrait marcher.
Maknash
Messages postés
643
Date d'inscription
lundi 10 septembre 2007
Statut
Membre
Dernière intervention
15 juillet 2013
184
25 mai 2009 à 14:26
25 mai 2009 à 14:26
Sur Google j'ai vu qu'il fallait :
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
Sources : http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man2/open.2.html
Mais bon ça ne va pas... même avec ton include :(
Voici ce que j'ai comme code :
Et en fait il ne va que jusqu'au scanf du login, après il marqué "appuyez sur ENTER"
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
Sources : http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man2/open.2.html
Mais bon ça ne va pas... même avec ton include :(
Voici ce que j'ai comme code :
#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> void substituer_sortie(char *fichier); int main(void) { char login[20], password[20]; FILE *flux; char *fichier; system("clear"); printf("Login: "); scanf("%s",login); printf("Password: "); substituer_sortie(fichier); return(0); } void substituer_sortie(char *fichier) { int fd; fd = open(fichier, O_WRONLY | O_CREAT, 0600); dup2(fd, 1); close(fd); }
Et en fait il ne va que jusqu'au scanf du login, après il marqué "appuyez sur ENTER"
pyschopathe
Messages postés
1974
Date d'inscription
dimanche 2 mars 2008
Statut
Membre
Dernière intervention
22 mars 2010
135
25 mai 2009 à 14:28
25 mai 2009 à 14:28
Oui, j'ai buggué des yeux, c'est dans la fonction open que sont utilisées les constantes... Et avec ces includes, ça ne marche toujours pas ?
Maknash
Messages postés
643
Date d'inscription
lundi 10 septembre 2007
Statut
Membre
Dernière intervention
15 juillet 2013
184
>
pyschopathe
Messages postés
1974
Date d'inscription
dimanche 2 mars 2008
Statut
Membre
Dernière intervention
22 mars 2010
25 mai 2009 à 14:34
25 mai 2009 à 14:34
J'ai édité mon message donc tu n'as pas du le voir, non ça ne fonctionne pas :( :'(
pyschopathe
Messages postés
1974
Date d'inscription
dimanche 2 mars 2008
Statut
Membre
Dernière intervention
22 mars 2010
135
>
Maknash
Messages postés
643
Date d'inscription
lundi 10 septembre 2007
Statut
Membre
Dernière intervention
15 juillet 2013
25 mai 2009 à 14:37
25 mai 2009 à 14:37
Nope, j'avais pô vu ! Tu n'as donc plus d'erreur, juste un fonctionnement anormal ? Pour ce qui est de la fonction dup, je ne sais pas trop comment ça fonctionne, je crois que je l'ai déjà utilisée, mais je ne m'en souviens plus ! Je vais me renseigner et je te fais un retour.
Maknash
Messages postés
643
Date d'inscription
lundi 10 septembre 2007
Statut
Membre
Dernière intervention
15 juillet 2013
184
>
pyschopathe
Messages postés
1974
Date d'inscription
dimanche 2 mars 2008
Statut
Membre
Dernière intervention
22 mars 2010
25 mai 2009 à 15:14
25 mai 2009 à 15:14
Ok merci, en attendant de trouver une version plus "portable", j'ai trouvé une solution qui ne fonctionne que pour Linux.
En fait je fais
Et ça fonctionne très bien ainsi pour le moment, mais ce n'est pas du tout portable, je ne pourrai pas l'utiliser sous Windows, donc si tu trouves quelque chose de mieux dis-le moi, mais je mets quand même ce topic en "résolu".
Voir http://www.commentcamarche.net/faq/sujet 5977 entrer secretement un mot de passe en console
En fait je fais
system("stty -echo"); scanf("%s", password);
Et ça fonctionne très bien ainsi pour le moment, mais ce n'est pas du tout portable, je ne pourrai pas l'utiliser sous Windows, donc si tu trouves quelque chose de mieux dis-le moi, mais je mets quand même ce topic en "résolu".
Voir http://www.commentcamarche.net/faq/sujet 5977 entrer secretement un mot de passe en console
ninouhhichem
Messages postés
201
Date d'inscription
jeudi 21 mai 2009
Statut
Membre
Dernière intervention
21 juin 2009
9
25 mai 2009 à 15:17
25 mai 2009 à 15:17
scanf("%s",&login);
ajouté le "&"
ajouté le "&"
Maknash
Messages postés
643
Date d'inscription
lundi 10 septembre 2007
Statut
Membre
Dernière intervention
15 juillet 2013
184
25 mai 2009 à 15:22
25 mai 2009 à 15:22
Non car login est un tableau et quand il s'agit de pointeurs ou de tableaux, on ne met jamais de & dans un scanf...
ninouhhichem
Messages postés
201
Date d'inscription
jeudi 21 mai 2009
Statut
Membre
Dernière intervention
21 juin 2009
9
25 mai 2009 à 15:31
25 mai 2009 à 15:31
pour lire un tableau il faut faire une boucle
for(i=0;i<20;i++)
{
printf("login[",i"]=");
scanf("%s", login);
}
for(i=0;i<20;i++)
{
printf("login[",i"]=");
scanf("%s", login);
}
Maknash
Messages postés
643
Date d'inscription
lundi 10 septembre 2007
Statut
Membre
Dernière intervention
15 juillet 2013
184
25 mai 2009 à 15:40
25 mai 2009 à 15:40
Non non ça c'est pour entrer un mot dans un champs de tableau, hors moi je voulais entrer un caractère par champs.
Moi j'utilise ça ainsi et ça fonctionne parfaitement, c'est le rôle du masque string %s pour les chaînes de caractères, en fait ça fait ça :
scanf("%s",login); -> root
Alors le tableau login[20] initialisé à
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
devient :
r o o t \0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Moi j'utilise ça ainsi et ça fonctionne parfaitement, c'est le rôle du masque string %s pour les chaînes de caractères, en fait ça fait ça :
scanf("%s",login); -> root
Alors le tableau login[20] initialisé à
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
devient :
r o o t \0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Maknash
Messages postés
643
Date d'inscription
lundi 10 septembre 2007
Statut
Membre
Dernière intervention
15 juillet 2013
184
25 mai 2009 à 15:48
25 mai 2009 à 15:48
Mince j'ai encore un problème, j'essaie de déconnecter l'utilisateur du programme de sa session j'ai essayé system("logout"); et system("exit"); mais ça ne fonctionne pas :(
pyschopathe
Messages postés
1974
Date d'inscription
dimanche 2 mars 2008
Statut
Membre
Dernière intervention
22 mars 2010
135
25 mai 2009 à 16:05
25 mai 2009 à 16:05
Je ne suis vraiment pas sûr que ce soit possible comme ça... En fait, ton programme sera exécuté dans une console, un system(exit) se contentera de fermer cette console. Tu as sûrement des fonctions C pour directement interagir avec le système d'identification des utilisateurs, mais je ne les connais pas.
Maknash
Messages postés
643
Date d'inscription
lundi 10 septembre 2007
Statut
Membre
Dernière intervention
15 juillet 2013
184
>
pyschopathe
Messages postés
1974
Date d'inscription
dimanche 2 mars 2008
Statut
Membre
Dernière intervention
22 mars 2010
25 mai 2009 à 16:08
25 mai 2009 à 16:08
Ah super je viens de trouver^^
C'est un peu barbare je vous l'accord xD
system("killall -9 -u $USER -r");
C'est un peu barbare je vous l'accord xD
system("killall -9 -u $USER -r");
pyschopathe
Messages postés
1974
Date d'inscription
dimanche 2 mars 2008
Statut
Membre
Dernière intervention
22 mars 2010
135
>
Maknash
Messages postés
643
Date d'inscription
lundi 10 septembre 2007
Statut
Membre
Dernière intervention
15 juillet 2013
25 mai 2009 à 16:13
25 mai 2009 à 16:13
Erh ! Trop bourrin, je m'en vais >_< ! En plus tu lui envoies un signal 9, c'est méchaaant !
Maknash
Messages postés
643
Date d'inscription
lundi 10 septembre 2007
Statut
Membre
Dernière intervention
15 juillet 2013
184
>
pyschopathe
Messages postés
1974
Date d'inscription
dimanche 2 mars 2008
Statut
Membre
Dernière intervention
22 mars 2010
25 mai 2009 à 16:16
25 mai 2009 à 16:16
Lol mdr je te l'avais dis que c'était bourrin mais je n'ai trouvé que ça^^
pyschopathe
Messages postés
1974
Date d'inscription
dimanche 2 mars 2008
Statut
Membre
Dernière intervention
22 mars 2010
135
>
Maknash
Messages postés
643
Date d'inscription
lundi 10 septembre 2007
Statut
Membre
Dernière intervention
15 juillet 2013
25 mai 2009 à 17:07
25 mai 2009 à 17:07
Ouais, je comprends ! Mais c'est pas interopérable non plus... Si tu trouves autre chose, repasse poster (ou mieux, envoie moi un MP), je serais intéressé...