Modifying text in the terminal

▼魔方 西西 提交于 2019-12-01 08:34:47

There are a number of ways to do this, and depending on how much effort you want to put into it, you can do a lot of cool things with ascii text in a terminal window.

  1. Advanced: ncurses library

  2. Easier: ansi escape characters with printf or cout

  3. Easiest: As others have said, simply use \r for a carriage return without a linefeed.

Edit: example of using the ESC sequence to go back two characters:

#include <iostream>
#define ESC char(0x1B)

int main(){
  std::cout << "This will overwrite 'rs' in the following: characters" << ESC << "[2D" << "xx" << std::endl;
  return 0;
}

A very simple way to do it is to print out a string followed by a '\r' character. That is carriage return by itself and on most consoles, it returns the cursor to the beginning of the line without moving down. That allows you to overwrite the current line.

If you are writing to stdout or cout or clog remember to fflush or std::flush the stream to make it output the line immediately. If you are writing to stderr or cerr then the stream is unbuffered and all output is immediate (and inefficient).

A more complicated way to do it is to get into using a screen drawing library like curses.

On Linux systems, check out the ncurses package. This package provides support for cursor movement on most terminals.

You can use the "\r" character to return to the first character of that line:

for(int i = 0; i < 60; i++){ cout << "\rValue of i: " << i;}

Keep in mind to NOT put an end line (endl or '\n') at the end of your output, or you'll just skip to the beginning of the new line each time, losing that desired effect.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!