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

  Рет қаралды 13,072

selfedu

selfedu

Күн бұрын

Пікірлер: 33
@952a259
@952a259 Жыл бұрын
Доброе утро! Спасибо за Ваши видео! Как раз на JavaScript потоки ввода/ вывода на прошлой неделе проходили 🙂
@nikito4ka041
@nikito4ka041 Жыл бұрын
Спасибо тебе за полезный контент! Продолжай в том же духе!
@АлександрБулыга-н2г
@АлександрБулыга-н2г Жыл бұрын
Сергей, спасибо за уроки, очень интересно и информативно. По последней программе у меня есть одно замечание: Условие 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';
@АлексейАлексеев-ц8х9т
@АлексейАлексеев-ц8х9т Жыл бұрын
Я правильно понимаю, что bf[i++] = ch это тоже самое, что и bf[i] = ch i += 1 ?
@АлександрБулыга-н2г
@АлександрБулыга-н2г Жыл бұрын
Да, вы правильно понимаете.
@SergGin1
@SergGin1 Жыл бұрын
15:10 жаль не затронута тема отчистки stdin, если ввести больше чем надо символов, то хоть и запишется в массив столько, сколько указали в условии while, но при следующем вызове getchar считывает оставшиеся в потоке байты.
@andreynomad
@andreynomad Жыл бұрын
"Строка читается не целиком, а лишь до пробельного символа, и это поведение никак нельзя изменить" - тут ошибка. Мы можем указывать свои собственные спецификаторы, на которых нужно останавливать чтение. Например, scanf("%[^ ]s", array_name) будет читать строку до тех пор, пока не встретит ' '.
@andredru4278
@andredru4278 Жыл бұрын
Спасибо. Многое прояснилось.
@NastyaTrynova
@NastyaTrynova Жыл бұрын
Сергей, сделайте, пожалуйста, курс по МО и нейросетям на степике Ваши прошлый курсы очень понравились, и было бы очень здорово потренироваться на задачах после ваших видео по МО на ютубе
@jamjam3337
@jamjam3337 Жыл бұрын
спасибо!👏👍
@РусланКарнеенко
@РусланКарнеенко Жыл бұрын
Спасибо
@АлександрКаптуров-с8и
@АлександрКаптуров-с8и Жыл бұрын
Сергей, здравствуйте! Видео как всегда супер! Подскажите пожалуйста, когда Ваш курс по Cи ожидать на Stepik?
@selfedu_rus
@selfedu_rus Жыл бұрын
Ох, этого не знаю, даже пока не думал его делать ))
@donfedor007
@donfedor007 Жыл бұрын
Доброе время суток! Не совсем понял как работает эта строка. (ch = getchar()) != ' ' , в начале считывает в переменную ch, а затем её сравнивает с символом ' '? Запутался что то(
@selfedu_rus
@selfedu_rus Жыл бұрын
да, именно так (сравнивает на неравенство)
@donfedor007
@donfedor007 Жыл бұрын
@@selfedu_rus спасибо
@Lovzu
@Lovzu Жыл бұрын
Сергей, а сколько вы всего знаете языков программирования?
@selfedu_rus
@selfedu_rus Жыл бұрын
Здесь вопрос, что значить знать? )) Лучше спросить, на скольких программировал. Где-то 5-7, как считать.
@donfedor007
@donfedor007 Жыл бұрын
@@selfedu_rus Очень круто!
@smolewood
@smolewood Жыл бұрын
Здравствуйте! Проясните один момент. Зачем при использовании функции getchar создавать указатель “*ptr” на массив “bf”, если имя массива это и есть указатель на его первый элемент? Нельзя сразу использовать bf[i++] = ch; ?
@selfedu_rus
@selfedu_rus Жыл бұрын
В данном случае можно.
@MrLeyt1125
@MrLeyt1125 11 ай бұрын
Из-за того что в 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 спасибо, а автор канала говорит, что никуда не добавляется, а если всё место, то что, не добавляется?
Леон киллер и Оля Полякова 😹
00:42
Канал Смеха
Рет қаралды 4,7 МЛН
Mom Hack for Cooking Solo with a Little One! 🍳👶
00:15
5-Minute Crafts HOUSE
Рет қаралды 23 МЛН
Битовые операции в С++
14:11
Оксана Еськова. Основы программирования
Рет қаралды 663
Строки в стиле Си.  Ввод и вывод строк
20:11
Оксана Еськова. Основы программирования
Рет қаралды 267
Язык C++ с нуля | #10 Символы и строки в c++.
15:39
Программист86
Рет қаралды 19 М.