getchar()
не очень хорошая опция для обработки ввода пользователя. Сказав, что, если вы все еще хотите использовать эту функцию, вы можете попробовать, не используя fflush
и накапливая два вызова getchar
:
Примерно так:
for (p=0; p<n_players; p++) {
...
c = getchar(); // c will hold character read
getchar(); // will consume '\n'
}
С getchar()
дело в том, что он возвращает следующий символ, доступный в буфере клавиатуры. Итак, если вы делаете c = getchar()
, а пользователь делает:
E '\ п'
(что означает, что он / она нажимает символ E, а затем ENTER)
c
будет содержать значение 'E', а следующий вызов getchar()
будет использовать ENTER ('\ n'), нажатый пользователем.
Итак, как вы можете видеть, это довольно сложно и трудно правильно контролировать.
Если это для тестирования некоторого кода, хорошо. Если это для реального приложения, попробуйте использовать зависимые от платформы библиотеки для пользовательского ввода (Win32 в Windows, GTK в Linux, ncurser в Linux и т. Д.)