Is it possible to modify text I printed to the terminal without clearing the screen?
For instance, if I\'m showing progress of something in percentage, can I modify
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.
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.
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.
Advanced: ncurses library
Easier: ansi escape characters with printf or cout
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;
}
On Linux systems, check out the ncurses
package. This package provides support for cursor movement on most terminals.