У меня есть функция, которая читает ПИН-код с терминала и сохраняет ПИН-код и длину ПИН-кода в переданных переменных. При первом вызове функции я получаю ожидаемый PIN-код и введенную длину PIN-кода. Однако при втором вызове этой функции первый символ опускается.
/*
* Function : read_pin(char *pin,int *pin_len)
* Description : Read entered PIN and stores PIN in pin and pin length in pin_len
*/
int read_pin(unsigned char *pin,unsigned int *pin_len)
{
int err = EXIT_SUCCESS;
char ch;
fflush(stdout);
/* Pause to get pin (if removed, input is not read from terminal)*/
getchar(); // i think,this is causing PROBLEM
while( ((ch = getchar()) != '\n') )
{
pin[*pin_len] = ch;
(*pin_len)++;
}
/* If newline at the end of the pin. You'll have to check that */
if( pin[*pin_len-1] == '\n' )
{
pin[*pin_len-1] = '\0';
}
exit:
return err;
}
Вызов этой функции:
printf("\nSelect session : ");
scanf("%d", &option);
printf("\nEnter old PIN: ");
read_pin(old_pin, &old_pin_len); // input: "1234" got: "1234"
fflush(stdout);
printf("\nEnter new PIN: ");
read_pin(new_pin, &new_pin_len); //input: "12345" got: "2345" (1 is omitted)
Может кто-нибудь объяснить мне, почему у меня такое поведение и как это исправить?