Home > Net >  Is it possible to print this shape without printing spaces in C as described in the book "Thi
Is it possible to print this shape without printing spaces in C as described in the book "Thi

Time:08-15

In a book named "Think Like a Programmer" by Anton Spraul, on chapter 2, exercise 1, page 53, this is what is written:

Using the same rule as the shapes programs from earlier in the chapter (only two output statements — one that outputs the hash mark and one that outputs an end-of-line), write a program that produces the following shape:

########
 ######
  ####
   ##

So we can only use cout << "\n"; and cout << "#"; but not cout << " ";

Solving this problem by printing spaces is easy (see code below). But is it possible to print such shape without printing spaces in C ?

#include <iostream>

using std::cin;
using std::cout;

int main()
{
    int shapeWidth = 8;

    for (int row = 0; row < 4; row  ) {
        for(int spaceNum = 0; spaceNum < row; spaceNum  ) {
            cout << " ";
        }
        for(int hashNum = 0; hashNum < shapeWidth-2*row; hashNum  ) {
            cout << "#";
        }
        cout << "\n";
    }

}

Solving this problem by printing spaces is easy (see code above). But is it possible to print such shape without printing spaces in C ?

In one of the answers I read one can remove the for (int spaceNum. . . loop and rather just put cout << setw(row 1); to achieve that.

Clarification: The author never used a shape as example where one had to print spaces or indentations like the above. Interpreting the exercise above literally, he expects us to write that shape by printing "#" and "\n" only. Printing spaces or indentations by only printing "#" and "\n" seems not possible to me, so I thought maybe he was not careful when he wrote exercises. Or there's a way to achieve that but it's just me who doesn't know. This is why I asked this.

CodePudding user response:

Yes, this is possible.
Set the stream width to the length of the row.
Set the stream formatting to right-justified.

Look up stream manipulators in your book or another C references.

CodePudding user response:

Possibly! But that is a question about the system you’re running on, not about C . As far as the language is concerned, it’s just outputting characters. The fact that outputting a “space” character moves the cursor to the right on the screen — or even the existence of the screen — is a matter of how the operating system and the software running on it interpret the characters that have been output.

Most notably, you can use ANSI escape sequences to move the cursor around on most text consoles. There’s no particular reason to do this unless you’re writing a full-screen text mode UI.

  • Related