fgets в бесконечном цикле - PullRequest
       2

fgets в бесконечном цикле

0 голосов
/ 03 октября 2019

Я пытаюсь использовать fgets в бесконечном цикле, так как мне нужен конкретный ввод от пользователя. Я хочу что-то постоянно печатать, пока не получу какой-либо вклад от пользователя. Однако fgets, кажется, заставляет программу ждать ввода.

Я пытался использовать другие методы ввода, такие как get.

while(1){
        char input[100];
        fgets(input, sizeof(input),stdin);
        printf("I want this statement to continuously print.");
}

Оператор печатается только при вводе текста. Однако я хочу, чтобы он постоянно печатал выписку независимо от ввода.

1 Ответ

1 голос
/ 03 октября 2019

Все операции ввода-вывода в стандартной библиотеке C: блокировка ввода-вывода. Это означает, что если вы выполняете чтение или запись в файл (или стандартный ввод и т. Д.), Функция чтения или записи не вернется, пока не произойдет чтение или запись (или не возникнет ошибка).

Если вы хотитечтобы код выполнялся во время выполнения операций ввода-вывода, вам необходимо (1) использовать несколько потоков или (2) использовать неблокирующий неблокирующий ввод / вывод (например, Posix для чтения / записи в файлы с помощью O_NONBLOCK)). В случае с stdin это может также привести к некоторому низкоуровневому беспорядку с настройками терминала.

...