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

  Рет қаралды 8,322

selfedu

selfedu

Жыл бұрын

Практический курс по C/C++: stepik.org/course/193691/
Телеграм-канал: t.me/java_and_c
Инфо-сайт: proproprogs.ru/c_base
Стандартные функции для вывода строк в стандартный поток stdout и функции считывания строк из потока stdin. Проблемы при считывании строк и способы их решения.

Пікірлер: 34
@vladimirastrelin1719
@vladimirastrelin1719 Жыл бұрын
Как всё просто в Python в этом плане и как всё сложно в Си..) Спасибо за урок, всё как всегда очень интересно
@SergGin1
@SergGin1 Жыл бұрын
15:10 жаль не затронута тема отчистки stdin, если ввести больше чем надо символов, то хоть и запишется в массив столько, сколько указали в условии while, но при следующем вызове getchar считывает оставшиеся в потоке байты.
@952a259
@952a259 Жыл бұрын
Доброе утро! Спасибо за Ваши видео! Как раз на JavaScript потоки ввода/ вывода на прошлой неделе проходили 🙂
@nikito4ka041
@nikito4ka041 6 ай бұрын
Спасибо тебе за полезный контент! Продолжай в том же духе!
@andreynomad
@andreynomad 8 ай бұрын
"Строка читается не целиком, а лишь до пробельного символа, и это поведение никак нельзя изменить" - тут ошибка. Мы можем указывать свои собственные спецификаторы, на которых нужно останавливать чтение. Например, scanf("%[^ ]s", array_name) будет читать строку до тех пор, пока не встретит ' '.
@NastyaTrynova
@NastyaTrynova Жыл бұрын
Сергей, сделайте, пожалуйста, курс по МО и нейросетям на степике Ваши прошлый курсы очень понравились, и было бы очень здорово потренироваться на задачах после ваших видео по МО на ютубе
@andredru4278
@andredru4278 4 ай бұрын
Спасибо. Многое прояснилось.
@user-cm9nh5hv7w
@user-cm9nh5hv7w 8 ай бұрын
Сергей, спасибо за уроки, очень интересно и информативно. По последней программе у меня есть одно замечание: Условие i < sizeof(bf)-1 нужно ставить первым, иначе на десятой итерации в пересенную ch читается (но не записывается в массив bf[ ] ) очередной символ из входного потока, фактически он теряется. На мой взгляд такой вариант более корректный: char bf[10], ch; int i = 0; while(i < sizeof(bf)-1 && (ch = getchar()) != ' ' && ch != EOF) bf[i++] = ch; bf[i] = '\0';
@user-cm1ri1sn2u
@user-cm1ri1sn2u 8 ай бұрын
Я правильно понимаю, что bf[i++] = ch это тоже самое, что и bf[i] = ch i += 1 ?
@user-cm9nh5hv7w
@user-cm9nh5hv7w 8 ай бұрын
Да, вы правильно понимаете.
@jamjam3337
@jamjam3337 11 ай бұрын
спасибо!👏👍
@user-xm5zl9up4r
@user-xm5zl9up4r 4 ай бұрын
Спасибо
@user-hm4tl3hy4u
@user-hm4tl3hy4u Жыл бұрын
Сергей, здравствуйте! Видео как всегда супер! Подскажите пожалуйста, когда Ваш курс по Cи ожидать на Stepik?
@selfedu_rus
@selfedu_rus Жыл бұрын
Ох, этого не знаю, даже пока не думал его делать ))
@Lovzu
@Lovzu Жыл бұрын
Сергей, а сколько вы всего знаете языков программирования?
@selfedu_rus
@selfedu_rus Жыл бұрын
Здесь вопрос, что значить знать? )) Лучше спросить, на скольких программировал. Где-то 5-7, как считать.
@donfedor007
@donfedor007 Жыл бұрын
@@selfedu_rus Очень круто!
@donfedor007
@donfedor007 Жыл бұрын
Доброе время суток! Не совсем понял как работает эта строка. (ch = getchar()) != ' ' , в начале считывает в переменную ch, а затем её сравнивает с символом ' '? Запутался что то(
@selfedu_rus
@selfedu_rus Жыл бұрын
да, именно так (сравнивает на неравенство)
@donfedor007
@donfedor007 Жыл бұрын
@@selfedu_rus спасибо
@smolewood
@smolewood 7 ай бұрын
Здравствуйте! Проясните один момент. Зачем при использовании функции getchar создавать указатель “*ptr” на массив “bf”, если имя массива это и есть указатель на его первый элемент? Нельзя сразу использовать bf[i++] = ch; ?
@selfedu_rus
@selfedu_rus 7 ай бұрын
В данном случае можно.
@MrLeyt1125
@MrLeyt1125 3 ай бұрын
Из-за того что в 1930годах кто-то через gets уязвимость заабюзил на ссаном юниксе я теперь в 2028 не могу нормально со строками рабоатать. В любом другом языке уязвимость бы исправили, но нет, у нас же надо поддерживать обратную совместимость (софт на компьютерах викторианской эпохи) и нельзя ничего менять. Вывод? Если надо работать со строками или что-то парсить - не используйте Си вообще, для этого есть питон или джава
@lemmenmin7676
@lemmenmin7676 Жыл бұрын
так fgets() добавляет в конец \0 или ??? так надо менять на \0 ??? что то сказано, а нужно ли это? если сказано, то показывай, а не говори. а показано как будто не надо.
@selfedu_rus
@selfedu_rus Жыл бұрын
добавляет автоматом 0 после последнего прочитанного символа (' ' читается из stdin, если он мешает, то следует его самостоятельно убрать, заменив нулем)
@lemmenmin7676
@lemmenmin7676 Жыл бұрын
@@selfedu_rus не сказано куда добавляется ' '. в конец строки, но ведь там больше нет места или куда? в память следущую за массивом? в поток?
@SergGin1
@SergGin1 Жыл бұрын
​@@lemmenmin7676 fgets добавляет в конец \0. Если введенная строка занимает не всё место (Наприм. "Hello", то когда вы её вводите нажимая enter в конец вставляется символ ' ' и получается строка выглядит как "Hello ", а потом fgets превращает её в нормальную для си строку "Hello \0"), как видно остался ' ' символ - его нужно убрать, иначе при вставке будет выведена строка и сразу перенос. Если нужно то нужно, а если не нужно, то не нужно. Обычно никому не нужна строка включающая прямо в себе перенос строки.
@selfedu_rus
@selfedu_rus Жыл бұрын
@@lemmenmin7676 он не добавляется, он читается из входного потока и не удаляется, как это делает, например, функция scanf()
@lemmenmin7676
@lemmenmin7676 Жыл бұрын
@@SergGin1 спасибо, а автор канала говорит, что никуда не добавляется, а если всё место, то что, не добавляется?
Джоконда
35:17
АВТОНОМИЯ ЧЕЛОВЕКА
Рет қаралды 4
Каха инструкция по шашлыку
01:00
К-Media
Рет қаралды 2,5 МЛН
ELE QUEBROU A TAÇA DE FUTEBOL
00:45
Matheus Kriwat
Рет қаралды 29 МЛН
Кәріс өшін алды...| Synyptas 3 | 10 серия
24:51
Язык Си для начинающих / #6 - Функции в Си
20:09
Гоша Дударь
Рет қаралды 108 М.
Создание и заполение массива на Си
12:35
Тимофей Хирьянов
Рет қаралды 81 М.
Изучение Си в одном видео уроке за час!
57:15
Гоша Дударь
Рет қаралды 513 М.
Каха инструкция по шашлыку
01:00
К-Media
Рет қаралды 2,5 МЛН