\r
- это символ возврата каретки ; он говорит эмулятору терминала перемещать курсор в начале строки.
Курсор - это позиция, в которой будут отображаться следующие символы.
Итак, печать \r
позволяет переопределить текущую строку эмулятора терминала.
Том Зыч понял, почему вывод вашей программы o world
, тогда как \r
находится в конце строки, и после этого вы ничего не печатаете:
Когда ваша программа завершает работу, оболочка печатает командную строку. Терминал отображает его там, где вы оставили курсор. Ваша программа оставляет курсор в начале строки, поэтому командная строка частично переопределяет напечатанную вами строку. Это объясняет, почему вы увидели командную строку, за которой следует o world
.
Онлайн-компилятор , о котором вы упомянули, просто печатает необработанный вывод в браузер. Браузер игнорирует управляющие символы, поэтому \r
не действует.
См. https://en.wikipedia.org/wiki/Carriage_return
Вот пример использования \r
:
#include <stdio.h>
#include <unistd.h>
int main()
{
char chars[] = {'-', '\\', '|', '/'};
unsigned int i;
for (i = 0; ; ++i) {
printf("%c\r", chars[i % sizeof(chars)]);
fflush(stdout);
usleep(200000);
}
return 0;
}
Он многократно печатает символы -
\
|
/
в одной и той же позиции, создавая иллюзию вращения |
в терминале.