Afficher des etoiles quand on saisit - en langage C

	do{
  car = getch();
  printf("*");
  if(car != 13 && car!=127)
  {
  	pass[j] = car;
  	j++;
  }
  	else{
    	if(car==127)
    	{
      j--;
    	}
    }
	
}while(car != 13);
pass[j] = '\0';

jai essayé come, c’est un peu foireux mais ça passe pas!!

comment faire ?

là j’avoue que je seche…

en tout cas j’ai remarqué que pour toute les authentifications ds le terminal, rien ne s’affiche quand tu tapes ton password :neutre:

Ah ben j’avais pas complètement faux alors. :wink:

Sauf que j’avais mis 13 (et 10 aussi) en héxadécimal alors que c’était en décimal…

Bonne continuation.

Essaye de ne prendre en compte que les codes compris entre 33 et 126.

Pis tu ne peux pas décrémenter J à chaque fois que tu appuies sur "Escape", sinon tu risques de te retrouver avec une valeur négative de J… :wink:

Il faut lire le code de la touche tant que ce code n’est pas égal à 13 ou 127 (avec un while).
A l’intérieur du while, tu n’incrémentes J que si le code est compris entre 33 et 126.

Tu peux aussi tester la valeur 9 du code qui doit être le "BackSpace" si je ne me trompe.

Tiens un code plus complet j’ai mis _getch car testé sous Windows (et sous win on met un _ quand c’est pas une function ANSI :p)

J’ai rajouté le support correct du backspace et ça ignore les caractères de contrôle de façon plus générique avec iscntrl().

#define LG 40
	char pass[LG], j;
	char car = '\0';
for (j = 0; j < LG-1 && car != '\r'; j++)
{
	car = _getch();
	switch (car)
	{
	case '\r':
  break;
	case 127:
  continue;
	case '\b':
  if (j > 0)
  {
  	putchar('\b');
  	putchar(' ');
  	putchar('\b');
  	j--;
  }
  break;
	default:
  if (!iscntrl(car))
  {
  	pass[j++] = car;
  	putchar('*');
  }
	}
}
putchar('\n');
pass[j] = '\0';
return 0;

jte remercie de ton aide mais ça marche pas. :slight_smile: