• Как в C удалить символы из stdout?

    eush77
    @eush77
    @jcmvbkbc @kadirov Всё верно, но во многих случаях это самый простой и быстрый способ.
  • Как в C удалить символы из stdout?

    eush77
    @eush77
    @kadirov Я обычно использую '\r'.
    printf("OK");
    printf("\rERROR");
  • Какая есть разница между /n и endl?

    eush77
    @eush77
    @Csklassami std::flush очищает внутренний буфер стандартной библиотеки. То есть обычно при записи в поток данные не сразу передаются ОС, но накапливаются в буфере и отправляются разом.

    Каждое опустошение буфера влечёт за собой системный вызов write(), а системные вызовы замедляют работу программы, поскольку процесс вынужден ожидать ядро ОС.

    Размер буфера определяется реализацией, у меня BUFSIZ равен 8192, поэтому предположим, что размер буфера равен 8КБ.
    Если программа выводит 64 строки длины ≤128 в поток, и в конце каждой ставит std::endl, то write() будет вызван 64 раза.
    Если теперь все ендлы заменить на '\n', то поскольку все строки помещаются в буфер (128⋅64=8192), write() будет вызван только один раз.
    Это, должно быть, очень грубый пример, но смысл таков.
  • Какая есть разница между /n и endl?

    eush77
    @eush77
    А вот и нет! :)

    Если поток открыт в текстовом режиме, то '\n' так же преобразуется в то, во что нужно (можете проверить сами).
    Единственная разница — это отсутствие неявного вызова std::flush.

    Кстати, это очень частый предмет непонимания среди начинающих разработчиков, они любят пихать везде и всюду std::endl, тогда как это может быть причиной потери производительности (сам сталкивался при написании одного алгоритма).