#36. Ввод/вывод строк в стандартные потоки | Язык C для начинающих

preview_player
Показать описание


Стандартные функции для вывода строк в стандартный поток stdout и функции считывания строк из потока stdin. Проблемы при считывании строк и способы их решения.
Рекомендации по теме
Комментарии
Автор

Как всё просто в Python в этом плане и как всё сложно в Си..) Спасибо за урок, всё как всегда очень интересно

vladimirastrelin
Автор

"Строка читается не целиком, а лишь до пробельного символа, и это поведение никак нельзя изменить" - тут ошибка. Мы можем указывать свои собственные спецификаторы, на которых нужно останавливать чтение. Например, scanf("%[^\n]s", array_name) будет читать строку до тех пор, пока не встретит '\n'.

andreynomad
Автор

Сергей, спасибо за уроки, очень интересно и информативно.
По последней программе у меня есть одно замечание:
Условие i < sizeof(bf)-1 нужно ставить первым, иначе на десятой итерации в пересенную ch читается (но не записывается в массив bf[ ] ) очередной символ из входного потока, фактически он теряется.

На мой взгляд такой вариант более корректный:
char bf[10], ch;
int i = 0;
while(i < sizeof(bf)-1 && (ch = getchar()) != '\n' && ch != EOF)
bf[i++] = ch;
bf[i] = '\0';

cmnhhvw
Автор

Спасибо тебе за полезный контент! Продолжай в том же духе!

nikitoka
Автор

Доброе утро! Спасибо за Ваши видео! Как раз на JavaScript потоки ввода/ вывода на прошлой неделе проходили 🙂

a
Автор

15:10 жаль не затронута тема отчистки stdin, если ввести больше чем надо символов, то хоть и запишется в массив столько, сколько указали в условии while, но при следующем вызове getchar считывает оставшиеся в потоке байты.

SergGin
Автор

Сергей, сделайте, пожалуйста, курс по МО и нейросетям на степике
Ваши прошлый курсы очень понравились, и было бы очень здорово потренироваться на задачах после ваших видео по МО на ютубе

NastyaTrynova
Автор

Сергей, здравствуйте! Видео как всегда супер! Подскажите пожалуйста, когда Ваш курс по Cи ожидать на Stepik?

hmtlhyu
Автор

Доброе время суток! Не совсем понял как работает эта строка. (ch = getchar()) != '\n' , в начале считывает в переменную ch, а затем её сравнивает с символом '\n'? Запутался что то(

donfedor
Автор

Сергей, а сколько вы всего знаете языков программирования?

Lovzu
Автор

Здравствуйте! Проясните один момент. Зачем при использовании функции getchar создавать указатель “*ptr” на массив “bf”, если имя массива это и есть указатель на его первый элемент? Нельзя сразу использовать bf[i++] = ch; ?

smolewood
Автор

Из-за того что в 1930годах кто-то через gets уязвимость заабюзил на ссаном юниксе я теперь в 2028 не могу нормально со строками рабоатать. В любом другом языке уязвимость бы исправили, но нет, у нас же надо поддерживать обратную совместимость (софт на компьютерах викторианской эпохи) и нельзя ничего менять.
Вывод? Если надо работать со строками или что-то парсить - не используйте Си вообще, для этого есть питон или джава

MrLeyt
Автор

так fgets() добавляет в конец \0 или \n ???
так надо менять \n на \0 ???
что то сказано, а нужно ли это?
если сказано, то показывай, а не говори.
а показано как будто не надо.

lemmenmin