Avatar billede nicklasw Nybegynder
23. december 2006 - 15:53 Der er 15 kommentarer og
1 løsning

console align

Hejsa.
Nu har jeg et problem igen...
jeg har lavet den her application som måler ram og sådan noget, men det ikke så vigtigt. problemmet ligger i at den ser sådan http://my-room.dk/ram.png ud.
men jeg vil gerne havde den til at se sådan ud...

Total mængde ram:          2146 MBytes
Brugt ram:                  621 MBytes
Ram tilbage:                1525 MBytes

Total mængde virtuel ram:  2147 MBytes
Brugt virtuel ram:            8 MBytes
Virtuel ram tilbage:        2139 MBytes

altså at tallene er alignet til højre.
kan man det, og hvis man kan, hvordan gør man så?

M.V.H Nicklas
Avatar billede arne_v Ekspert
23. december 2006 - 15:55 #1
der skal vel bare sættes et passende antal blanke ind

gode gamle printf er nok det nemmeste til den slags
Avatar billede nicklasw Nybegynder
23. december 2006 - 16:01 #2
vent lige texten ser forkert ud i mit eksempel... prøver lige at lave noget i photoshop
Avatar billede arne_v Ekspert
23. december 2006 - 16:01 #3
demo:

#include <iostream>
#include <cstdio>

using namespace std;

int main()
{
    char lbl[][32] = { "Total mængde ram", "Brugt ram", "Ram tilbage",
                      "Total mængde virtuel ram", "Brugt virtuel ram", "Virtuel ram tilbage" };
    int val[] = { 2146, 621, 1525, 2147, 8, 2139 };
    for(int i = 0; i < 6; i++)
    {
        char buf[80];
        sprintf(buf,"%-25s: %4d MBytes", lbl[i], val[i]);
        cout << buf << endl;
    }
    return 0;
}
Avatar billede nicklasw Nybegynder
23. december 2006 - 16:02 #4
vil gerne havde det til at se sådan ud http://my-room.dk/ram2.png
Avatar billede arne_v Ekspert
23. december 2006 - 16:04 #5
hvis du vil bruge C++ IO så er det setf med ios::left og ios::right der gør det
men koden er efter min mening ulæselig
Avatar billede arne_v Ekspert
23. december 2006 - 16:10 #6
demo:

#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
    char lbl[][32] = { "Total mængde ram", "Brugt ram", "Ram tilbage",
                      "Total mængde virtuel ram", "Brugt virtuel ram", "Virtuel ram tilbage" };
    int val[] = { 2146, 621, 1525, 2147, 8, 2139 };
    for(int i = 0; i < 6; i++)
    {
        cout.setf(ios::left);
        cout << setw(25) << lbl[i] << ": ";
        cout.unsetf(ios::left);
        cout.setf(ios::right);
        cout << setw(4) << val[i] << " MBytes" << endl;
        cout.unsetf(ios::right);
    }
    return 0;
}
Avatar billede nicklasw Nybegynder
23. december 2006 - 16:14 #7
hvordan vil det se ud hvis jeg skulle bruge C++ IO?
Avatar billede nicklasw Nybegynder
23. december 2006 - 16:15 #8
never mind... hehe
Avatar billede nicklasw Nybegynder
23. december 2006 - 16:23 #9
kan ikke rigtig få det til at virke... eller jo, men så kan jeg ikke få resten af min kode til at virke...
her er source

#include <iostream>
#include <windows.h>
#include <iomanip>

using namespace std;

DWORD total_phys_mem;
DWORD loaded_mem;
DWORD loaded_virtual;
DWORD total_virtual;
DWORD mem_back;
DWORD virtual_back;
HANDLE con = GetStdHandle(STD_OUTPUT_HANDLE);


    //declare COORD's
    COORD C_total;
    COORD C_brugt;
    COORD C_tilbage;

    COORD C_total_v;
    COORD C_brugt_v;
    COORD C_tilbage_v;


HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);

void get_mem_info(bool InMB)
{
    if (InMB == false)
    {
        MEMORYSTATUS m;
        m.dwLength = sizeof(m);
        GlobalMemoryStatus(&m);
        //Hent total fysisk ram
        total_phys_mem = m.dwTotalPhys;
        //Hent loaded ram
        loaded_mem = m.dwTotalPhys - m.dwAvailPhys;
        //Hent hvad der er tilbage af rammen
        mem_back = m.dwAvailPhys;
        //Hent total virtual ram
        total_virtual = m.dwTotalVirtual;
        //Hent Virtual ram
        virtual_back = m.dwAvailVirtual;
        //Beregn virtual loaded
        loaded_virtual = m.dwTotalVirtual - m.dwAvailPhys;
    }else
    {
        MEMORYSTATUS m;
        m.dwLength = sizeof(m);
        GlobalMemoryStatus(&m);
        //Hent total fysisk ram
        total_phys_mem = m.dwTotalPhys / 1000000;
        //Hent loaded ram
        loaded_mem = m.dwTotalPhys - m.dwAvailPhys;
        loaded_mem /= 1000000;
        //Hent hvad der er tilbage af rammen
        mem_back = m.dwAvailPhys / 1000000;
        //Hent total virtual ram
        total_virtual = m.dwTotalVirtual / 1000000;
        //Hent Virtual ram
        virtual_back = m.dwAvailVirtual / 1000000;
        //Beregn virtual loaded
        loaded_virtual = m.dwTotalVirtual - m.dwAvailVirtual;
        loaded_virtual /= 1000000;
    }
}

void screen_refresh()
{
    C_total.Y = 1;
    C_total.X = 28;

    C_brugt.Y = 2;
    C_brugt.X = 28;

    C_tilbage.Y = 3;
    C_tilbage.X = 28;

    C_total_v.Y = 5;
    C_total_v.X = 28;

    C_brugt_v.Y = 6;
    C_brugt_v.X = 28;

    C_tilbage_v.Y = 7;
    C_tilbage_v.X = 28;

    while (true)
    {
        get_mem_info(true);
        cout;
        SetConsoleCursorPosition(con, C_total);
        cout << total_phys_mem;

        SetConsoleCursorPosition(con, C_brugt);
        cout << loaded_mem;

        SetConsoleCursorPosition(con, C_tilbage);
        cout << mem_back;

        SetConsoleCursorPosition(con, C_total_v);
        cout << total_virtual;

        SetConsoleCursorPosition(con, C_brugt_v);
       
        cout << loaded_virtual;

        SetConsoleCursorPosition(con, C_tilbage_v);
        cout << virtual_back;
        Sleep(500);
    }

}

void show_screen()
{
        int i = 1;
        COORD coord;
        get_mem_info(true);
        cout << "-----------------------------------------" << endl
        << "Total m" << char(145) << "ngde ram:" << endl
        << "Brugt ram:" << endl
        << "Ram tilbage:"<< endl << endl
        << "Total m" << char(145) << "gde virtuel ram:" << endl
        << "Brugt virtuel ram:" << endl
        << "Virtuel ram tilbage:" << endl
        << "-----------------------------------------" ;

        while(i < 8)
        {
            coord.X = 40;
            coord.Y = i;
            SetConsoleCursorPosition(con, coord);
            cout << "|";
            coord.X = 33;
            SetConsoleCursorPosition(con, coord);
            if(i != 4)
            {
            cout << "MBytes";
            }
            i++;
        };


}

int main()
{
    SetConsoleTextAttribute(hConsole, FOREGROUND_GREEN | FOREGROUND_INTENSITY);
    system("mode con cols=42 lines=9");
    system("title MEM_INFO");

    show_screen();
    screen_refresh();

    return 0;
}

ved ikke lige hvordan jeg skal indrette min screen_refresh() function. på en måde så jeg kan bruge dit eksempel?
Avatar billede arne_v Ekspert
23. december 2006 - 16:38 #10
hvis du erstatter

        SetConsoleCursorPosition(con, C_total);
        cout << total_phys_mem;

med

        cout.setf(ios::right);
        SetConsoleCursorPosition(con, C_total);
        cout << setw(4) << total_phys_mem;
      cout.unsetf(ios::right);

måske
Avatar billede arne_v Ekspert
23. december 2006 - 16:38 #11
og tilsvarende for de andre
Avatar billede nicklasw Nybegynder
23. december 2006 - 16:49 #12
tak. bare læg et svar...
Avatar billede nicklasw Nybegynder
23. december 2006 - 16:51 #13
hvad er det helt præcist setf() gør?
Avatar billede arne_v Ekspert
23. december 2006 - 17:43 #14
setf sætter diverse flag som styrer hvordan IO laves

dec, hex, oct
left, right
o.s.v.
Avatar billede arne_v Ekspert
23. december 2006 - 17:43 #15
og et svar
Avatar billede nicklasw Nybegynder
23. december 2006 - 17:44 #16
okay... tusind tak
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester