Потоки в языке C (Си)


1. Поток – stream. Слишком низкоуровневое понятие для большинства языков.

Любой ввод/вывод данных осуществляется через поток. Входящий и выходящий электрический сигнал. Потоки – конструкции, которые позволяют управлять этими электрическими сигналами. istream, ostream – тип данных.

Компьютер работает с файлами как язык Си. Файл – это поток. Информация БД – массив. Все записи – фиксированной длины.

printf, scanf – работают с потоками.

Обозначения стандартных потоков
stdin – поток входящих сигналов с клавиатуры (scanf)
stdout – поток исходящих сигналов на монитор (printf)

scanf("%d",&x);
scanf("%c",&cm);
if(cm=='Y') printf("Продолжаем работу\n");
else printf("Выход из программы\n");

Этот код работать не будет, т.к. первый scanf получит число, а «/n» останется в потоке, которое попадет в следующий scanf (в случае %с – он принимает любой символ, в т.ч. /n). . Необходима принудительная очистка потока – fflush(stdin);

scanf("%d",&x);
 
fflush(stdin);
 
scanf("%c",&cm);
if(cm=='Y') printf("Продолжаем работу\n");
else printf("Выход из программы\n");

====================================================

Представим, что необходима промежуточная печать при сложных вычислениях (внутри цикла).

for(...)
{
...
printf(.....);
}

Информация из stdout «выталкивается» c задержкой, и не известно когда произошла ошибка. Необходимо использовать fflush.

for(...)
{
...
printf(.....);
fflush(stdout);
}

printf – появляется на экране монитора, когда переходит переключение потока в программе (когда появляется scanf).

Закрыто