очистить входной поток stdin от лишних символов
Primary tabs
Forums:
Очистить входной поток stdin от лишних си Можно , просто чистя его каждый раз, когда мы хотите считать символ вызывая после
getchar()
конструкцию
while (getchar() != '\n');
- соответственно, если пользователь введёт более оного символа - то всё лишнее вместе с символом перевода строки будет убрано из потока ввода
- такой способ соответствует стандартам и вполне переносим с одной платформы на другую.
_____________________________________________
Источники(читать подробнее)=
Ключевые слова и фразы(для поиска)=
как очистить stdin
- Log in to post comments
- 12689 reads
vedro-compota
Sat, 10/22/2011 - 14:08
Permalink
чтобы не вызывать каждый раз
А что если мы не знаем о состоянии входного потока и нам требуется его очистить в случае, если он заполнен . пример - есть функция меню =
int main() { char ch; /*printf("\n%s","print some line \n");*/ printf("\n%s","print some line \n"); ch = getchar(); mainmenu(); return 0; } int mainmenu(void) { int ch; /* вспомогательная переменная символьного типа*/ char* mtext = " Please specify the number of the task. \n * You can choose on number from set = {1} \n * Specify \"0\" to exit\n" ; char* errmes = " Error(!) = Main menu does not support this command.\n Make sure that your task number is from menu set of commands and try again. " ; while (getchar() != '\n'); /* fflush(stdin); clean the input - stdin or use while (getchar() != '\n'); - but this'll stop program*/ printf("\n%s",mtext ); ch = getchar() ; switch(ch) { case '0': printf("\n%s","00000" ); /*выходим с уведомлением об успешном завершении - с параметром 0 */ break; case '1': printf("\n%s","111111" ); break; default: printf("\n%s\n", errmes); } return 0; }чтобы получить корректные данные от пользователя входной поток должен быть очищен,
но возникает проблема - что если входной поток изначально был пуст -
то есть вызывающая функция имела вид =
int main() { mainmenu(); return 0; }если это так то наша функция mainmenu() остановит выполнение программы ожидая нажатия enter - так вот возникает вопрос - как сделать работу mainmenu() независимой от контекста вызывающей функции.
Примечание: можно было бы просто использовать
но эта функция вроде как обладает нестандартным поведением - то есть её реализация разнится в разных средах и компиляторах......
_____________
матфак вгу и остальная классика =)
vedro-compota
Tue, 12/06/2011 - 20:35
Permalink
int inputcl(void)
int inputcl(void) { printf("\n[%s]\n", "If nothing take place - press enter to continue the program execution."); while (getchar() != '\n'); /*remove \n or other useless data*/ return 0; }_____________
матфак вгу и остальная классика =)