Hey guys I'm having trouble on placing my loops I actually want to make a square and I dont know how to manipulate my own placement because I am used to gotoxy(); and I think it only works in TurboC++... As of now I am using DevC++ .. Can you tell me what to do ??

    for(int q=15;q>0;q--){
        cout<<"*"<<endl;
    }
    for(int q=15;q>0;q--){
        cout.width(25);cout<<"*"<<endl<<setprecision(8)<<right;
    }
    for(int i=1; i<=50; i++){
         cout<<"*";
    }

Recommended Answers

All 4 Replies

You're correct that gotoxy() is specific to the Borland compilers; there's no standard equivalent for it, exactly, but for this purpose, the code you have is good beginning. I would recommend making a few changes to get it working:

void draw_box(int width, char top, char sides, char bottom)
{
    cout << top 
         << setw(width - 2) << setfill(top)
         << top << endl;

    cout.fill(' ');
    for(int i = 0; i < width; i++)
    {
        cout << side
             << setw(width - 1) << right << side
             << endl;
    }

    cout << bottom
         << setw(width - 2) << setfill(bottom)
         << bottom << endl;
}

gotoxy let's you move unconditionally, but with standard output you need to print whitespace:

#include <iomanip>
#include <iostream>
#include <string>

using namespace std;

int main()
{
    int n = 15;

    cout << setfill('*') << setw(n + 1) << "\n";

    for (int i = 0; i < n - 2; i++)
    {
        cout << '*' + string(n - 2, ' ') + '*' << '\n';
    }

    cout << setfill('*') << setw(n + 1) << "\n";
}

If anything goes inside the box, care must be taken to align it properly as well as exclude whitespace characters that would otherwise be filled with non-whitespace characters. It can get kind of hairy:

#include <iomanip>
#include <iostream>
#include <string>

using namespace std;

int main()
{
    string data = "testy";
    int n = 15;

    cout << setfill('*') << setw(n + 1) << "\n";

    for (int i = 0; i < n - 2; i++)
    {
        string::size_type halfie = n / 2 - data.size() / 2 - 1;
        string x = '*' + string(halfie, ' ');

        x += data;
        x += string(halfie + (data.size() % 2 == 0), ' ') + '*';

        cout << x << '\n';
    }

    cout << setfill('*') << setw(n + 1) << "\n";
}

It can get even trickier if the data in the box could exceed the size of the box, in which you need to either make the box larger overall or truncate the data.

This is another simple example of how to do it. With a beautiful picture of one of the first popular home computers!

That TRS80 brings back fond memories.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.