C'est parce que pour répondre à la question du scanf, vous appuyez sur entrée.
Cette touche qui n'est pas avalée par le scanf est alors transmise à gets.
Videz le tampon par un getch(stdin) ou getchar().
Ensuite, si l'on tape un login de plus de 9 caractères, tout part en vrille.
#include<termios.h>#include<stdio.h>#include<stdlib.h>staticstructtermiosbefore;voidinitTerm(void){tcgetattr(0,&before);}voidresetTerm(void){tcsetattr(0,TCSANOW,&before);}voidsetTerm(intecho){structtermiosstate;tcgetattr(0,&state);state.c_lflag&=~ICANON;if(echo){state.c_lflag|=ECHO;}else{state.c_lflag&=~ECHO;}tcsetattr(0,TCSANOW,&state);}intmain(){charlogin[10];charmot[8],cg;size_ti;intrep;initTerm();do{printf("enter le login:");fgets(login,sizeoflogin,stdin);printf("enter le password:");setTerm(0);for(i=0;i<5;i++){cg=getchar();mot[i]=cg;cg='*';printf("%c",cg);}setTerm(1);mot[i]='0円';printf("\nnon(0) ou oui(1):");scanf("%d",&rep);getc(stdin);}while(rep==1);resetTerm();return0;}
Si l'on tape des logins trop longs, le buffer stdin va déborder de la même manière sur le getchar du mot de passe.
[^] # Re: Un test...
Posté par David Marec . En réponse au message problème avec la boucle do while. Évalué à 3.
C'est parce que pour répondre à la question du
scanf, vous appuyez sur entrée.Cette touche qui n'est pas avalée par le
scanfest alors transmise àgets.Videz le tampon par un
getch(stdin)ougetchar().Ensuite, si l'on tape un login de plus de 9 caractères, tout part en vrille.
Si l'on tape des logins trop longs, le buffer
stdinva déborder de la même manière sur legetchardu mot de passe.