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

Поделиться
HTML-код
  • Опубликовано: 13 дек 2024

Комментарии • 33

  • @SergGin1
    @SergGin1 Год назад +7

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

  • @АлександрБулыга-н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';

  • @952a259
    @952a259 Год назад +1

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

  • @nikito4ka041
    @nikito4ka041 Год назад +2

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

  • @andreynomad
    @andreynomad Год назад +7

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

  • @andredru4278
    @andredru4278 11 месяцев назад +1

    Спасибо. Многое прояснилось.

  • @jamjam3337
    @jamjam3337 Год назад +1

    спасибо!👏👍

  • @NastyaTrynova
    @NastyaTrynova Год назад +3

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

  • @РусланКарнеенко
    @РусланКарнеенко 10 месяцев назад +1

    Спасибо

  • @АлександрКаптуров-с8и

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

    • @selfedu_rus
      @selfedu_rus  Год назад

      Ох, этого не знаю, даже пока не думал его делать ))

  • @donfedor007
    @donfedor007 Год назад +1

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

    • @selfedu_rus
      @selfedu_rus  Год назад +1

      да, именно так (сравнивает на неравенство)

    • @donfedor007
      @donfedor007 Год назад +1

      @@selfedu_rus спасибо

  • @Lovzu
    @Lovzu Год назад +1

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

    • @selfedu_rus
      @selfedu_rus  Год назад +2

      Здесь вопрос, что значить знать? )) Лучше спросить, на скольких программировал. Где-то 5-7, как считать.

    • @donfedor007
      @donfedor007 Год назад +1

      @@selfedu_rus Очень круто!

  • @smolewood
    @smolewood Год назад +1

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

    • @selfedu_rus
      @selfedu_rus  Год назад

      В данном случае можно.

  • @MrLeyt1125
    @MrLeyt1125 10 месяцев назад +1

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

  • @lemmenmin7676
    @lemmenmin7676 Год назад

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

    • @selfedu_rus
      @selfedu_rus  Год назад

      добавляет автоматом 0 после последнего прочитанного символа ('
      ' читается из stdin, если он мешает, то следует его самостоятельно убрать, заменив нулем)

    • @lemmenmin7676
      @lemmenmin7676 Год назад

      @@selfedu_rus не сказано куда добавляется '
      '. в конец строки, но ведь там больше нет места или куда? в память следущую за массивом? в поток?

    • @SergGin1
      @SergGin1 Год назад +4

      ​@@lemmenmin7676
      fgets добавляет в конец \0.
      Если введенная строка занимает не всё место (Наприм. "Hello", то когда вы её вводите нажимая enter в конец вставляется символ '
      ' и получается строка выглядит как "Hello
      ", а потом fgets превращает её в нормальную для си строку "Hello
      \0"), как видно остался '
      ' символ - его нужно убрать, иначе при вставке будет выведена строка и сразу перенос.
      Если нужно то нужно, а если не нужно, то не нужно. Обычно никому не нужна строка включающая прямо в себе перенос строки.

    • @selfedu_rus
      @selfedu_rus  Год назад

      @@lemmenmin7676 он не добавляется, он читается из входного потока и не удаляется, как это делает, например, функция scanf()

    • @lemmenmin7676
      @lemmenmin7676 Год назад

      @@SergGin1 спасибо, а автор канала говорит, что никуда
      не добавляется, а если всё место, то что, не добавляется?