Остановка ввода без enter в си
Написал програму, которая первые 10 символов с клавиатуры записывает в файл, но проблема в том, что я могу ввести и 100 символов, а программа завершиться только когда я нажму enter, как сделать сохранение в файл до нажатия клавиши enter или просто хотя бы завершить работу по факту ввода 10 символов. (OS Windows).
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main() {
int c,i=0;
freopen("OUTPUT.txt", "w", stdout);
while ((c = getc(stdin)) != EOF && i<10) {
putc(c, stdout);
i++;
}
return 0;
}
Ответы (2 шт):
stdin - это не устройство, а буферируемый файл. Передача блока данных от драйвера клавиатуры в прикладную программу произойдёт только после нажатия клавиши Enter.
Для того, что бы работать на уровне отдельного нажатия клавиши на клавиатуре необходимы другие средства.
Проще всего - использовать библиотеку ncurses. Она большая и довольно сложная, но там есть посимвольный ввод/вывод.
Нашел способ проще, использовал getch()
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main() {
int c;
freopen("OUTPUT.txt", "w", stdout);
while (c = _getch()) {
putc(c, stdout);
fflush(stdout);
}
return 0;
}