Есть ли "надлежащий" способ очистить консоль в C помимо использования system("cls")
?
Ну, C не понимает концепцию экрана. Поэтому любой код не будет переносимым. Может быть, посмотрите на conio.h или curses, в зависимости от ваших потребностей?
Переносимость - это проблема, независимо от того, какая библиотека используется.
Поскольку вы упомянули cls
, похоже, вы имеете в виду окна. Если это так, то этот элемент базы знаний содержит код, который сделает это. Я просто попробовал, и это сработало, когда я вызвал его со следующим кодом:
cls( GetStdHandle( STD_OUTPUT_HANDLE ));
Не существует переносимого на C способа сделать это. Хотя различные библиотеки управления курсором, такие как curses, относительно переносимы. conio.h переносится между OS / 2 DOS и Windows, но не между вариантами * nix.
Само понятие «консоль» выходит за рамки стандарта C.
Если вы ищете чистое решение Win32 API, в консольном API Windows нет единого вызова для этого. Один из способов - FillConsoleOutputCharacter достаточно большого количества символов. Или WriteConsoleOutput Вы можете использовать GetConsoleScreenBufferInfo , чтобы узнать, сколько символов будет достаточно.
Вы также можете создать совершенно новый экранный буфер консоли и сделать его текущим.
Правильный способ сделать это - использовать функции tput
или terminfo
для получения свойств терминала, а затем вставить новые строки в соответствии с размерами ..
Windows:
система ("cls");
Unix:
система ("очистить");
Вы могли вместо этого вставляйте символы новой строки, пока все не будет прокручено, посмотрите здесь .
Благодаря этому вы легко добьетесь портативности.