Под стандартной процедурой ввода строки я подразумевал gets, fgets, scanf или fscanf.
Задача - надо вводить символ без эхо-отображения, и в случае совпадения его с каким-либо символом из заданного набора - печатать его. После этого надо напечатать приглашение и ввести строку с клавы.
тестовая программка выглядит так:
Код:
#include <stdio.h>
#include <stdlib.h>
#include <io.h>
#include <conio.h>
char *keys = "12345\0";
int main(int n, char **args)
{
char c, str[80];
while(1)
{
c = getch();
if(!strchr(keys, c))
continue;
putch(c);putch('\r');putch('\n');
printf("Enter your name: ");
gets(str);
}
return 0;
}
Проблема в том, что в данном коде при вызове gets (или любой другой процедуры) почему-то печатается тот символ, который до этого был введен с помощью getch().
Вот результат работы приведенного кода:
Код:
2
Enter your name: 2
Т.е. при вызове gets(str) почему-то печатается символ c, введенный раньше. Для ввода символа можно использовать getchar - результат тот же.
Компилировал прогу компилятором Microsoft из состава Microsoft Visual C++ 6.0, компилятором Watcom C/C++ 11.0, GNU C - поведение во всех случаях одинаковое. Во всех случаях создавалось windosw-приложение для текстового режима (win32 character-mode executable).
Как эту хрень исправить, знает кто-нибудь?