Home > Software engineering >  Align output in c
Align output in c

Time:10-09

int n, o = 2;
            
cout << "n="; cin >> n;
            
for(int i = 1; i <= n; i  ) {
    for(int j = n; j >= i; j--) {
        cout << o << " ";
        o  = 2;
    }
    cout << endl;
}

My code outputs (when n is 4)

2 4 6 8 
10 12 14 
16 18 
20

How would I align it to output this?

2  4  6  8 
  10 12 14 
     16 18 
        20

I am trying to align the output to the right in such a way that the numbers are aligned one below another (for example the 4 is aligned to the space between the 10 and 12 and I want to align it to 10). Thanks.

CodePudding user response:

The header <iomanip> provides many input/output manipulators you can play with, one beeing std::setw, which sets the width parameter of the stream for the next item.

Changing the line in the posted snippet that outputs the numbers into

std::cout << std::setw(3) << o;

The output becames

  2  4  6  8
 10 12 14
 16 18
 20

Now, to produce the desired output, we can notice that the first number of each row can either be printed with an increasing "width" (3 the first row, 6 the second and so on) or after a loop that prints the right amount of spaces (0 the first row, 3 the second and so on).

CodePudding user response:

just edited the inner loop of your code and this is the edited code:

#include <iostream>
using namespace std;
int main() {
    int n, o = 2;

    cout << "n="; cin >> n;

    for (int i = 1; i <= n; i  ) {
        for (int j = 1; j <= n; j  ) {
            if (j >= i) {
                cout << o << "\t";
                o  = 2;
            }
            else
            {
                cout << "\t";
            }
        }
        cout << endl;
    }
}

and this is some example output:

n=4
2       4       6       8
        10      12      14
                16      18
                        20

what I did is to make the inner loop, loops from 1 till n like the outer loop and only check if the current column is greater than or equal to the current row, if so, then I print the number and increment it, if not then I just cout a space or a tab to be more specific

  •  Tags:  
  • c
  • Related