COORD MenueKoord[10][10], was ist das für ein Array???



  • Hi liebe Community,
    also ich habe von einem Bekannten ein Quellcode bekommen
    (sozusagen zu Lehrzwecken) in dem man mit Masken arbeiten kann.
    Er hat mir noch gesagt, das man die einzelnen Positionen in den Masken
    mit folgendem Array ansprechen/anspringen kann aber nicht wie:

    COORD MenueKoord[10][10] =
    {
      {
        {15,11},{15,12},{15,13},{15,14},{15,15},{15,16},{52,11},{52,12},{52,13},{52,14}
      },
      {
        {15,7},{15,8},{15,9},{15,10},{15,11.... usw. usw.}
    }
    

    Jetzt versuche ich seit gestern, irgendwie mit diesem Array zu arbeiten aber
    egal was ich auch versuche es klappt alles nicht.
    Wenn ich z.B versuche mir den inhalt von MenueKoord[1][1] mit printf ausgeben zu
    lassen, bekomme ich immer nur die speicheradresse oder eine sonstige int zahl
    (786447), weiß nicht genau was sie darstellen soll!!
    Ich bin noch Anfänger (2 Monate ANSI C) und weiß daher nicht was ich sonst dazu sagen könnte/müsste also habt bitte etwas nachsicht wenn die Frage blöd ist.
    Danke vielmals XcrAckX


  • Mod

    786447 = 12*2^16 + 15. Das ist der Inhalt von MenueKoord[0][1], falls COORD vom Typ short ist (und noch ein paar andere Annahmen gelten die ich jetzt mal stillschweigend voraussetze). Ob signed oder unsigned kann ich aber nicht sagen - da Koordinaten gewöhnlich auch negativ sein können wird es wahrscheinlich ein signed Typ sein.

    Allgemein kannst du dies herausfinden, indem du suchst, wie COORD definiert wurde. Irgendwo wird ein entsprechender typedef stehen (oder wenn es ganz schlimm kommt ein define). Mach einfach mal eine Volltextsuche in den Quelltexten nach COORD, dann wirst du das schon irgendwo finden.



  • Also alles was ich noch finden konnte war COORD scrn;
    Ich werde einfach mall alles posten und hoffe das das erlaubt ist:
    unten stand noch die funktion für die zeitangabe aber die habe ich weggelassen,
    ist so schon genug code.
    In Menue.h stehen die Masken und folgende header (<stdio.h>, <string.h>, <conio.h>, <stdlib.h>, <time.h>, <windows.h>)

    #include "Menue.h"
    
    #define ESC 27
    
    COORD scrn;
    
    struct Kundendaten
    {
        char kundenvorname[30];
        char kundennachname[50];
        char kundenort[50];
        int kundenplz;
        char kundenstrasse[50];
        int kundenhausnr;
        int kundentelefon;
        int kundenfax;
        int kundennummer;
    }kunden[100];
    
    int getKey();
    void gotoxy(int xpos, int ypos);
    
    void HauptMenue(int W,int Color);
    void AdressMenu(int W,int Color);
    void BestellMenu(int W,int Color);
    void LagerMenu(int W, int Color);
    
    struct tm *ptm ;
    char   timestr[20];
    FILE *fo;
    
    int nr = 0;
    int Menue = 0;
    
    int versuch[2][2] = {{100,200}, {150,300}};
    
    COORD MenueKoord[10][10] =
    {
      {
        {15,11},{15,12},{15,13},{15,14},{15,15},{15,16},{52,11},{52,12},{52,13},{52,14}
      },
      {
        {15,7},{15,8},{15,9},{15,10},{15,11},{52,7},{52,8},{52,9},{52,10}
      },
      {
        {15,7},{15,8},{15,9},{15,10},{15,11},{52,7},{52,8},{52,9},{52,10}
      },
      {
        {15,7},{15,8},{15,9},{15,10},{15,11},{52,7},{52,8},{52,9},{52,10}
      }
    };
    
    char wahl;
    
    HANDLE hStdOut;
    
    FILE *fp;
    
    void main()
    {
    
        SetConsoleTitle("Einnahmenverarbeitungsprogramm version 1.0.1.0");
    
        int y = 0;
        int x = 0;
    
        time_t seconds = time(0);
        ptm = localtime(&seconds);;
    
        sprintf(timestr,"%02i-%02i-%04i %02i:%02i:%02i",
                (int)ptm->tm_mday,
                (int)ptm->tm_mon+1,
                (int)ptm->tm_year+1900,
                (int)ptm->tm_hour,
                (int)ptm->tm_min,
                (int)ptm->tm_sec);
    
        hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
        SetConsoleTextAttribute(hStdOut, FOREGROUND_BLUE| FOREGROUND_GREEN | FOREGROUND_INTENSITY);//| FOREGROUND_GREEN | BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED
    
        HauptMenue(0,0);
    
        scrn.X = 5;
        scrn.Y = 10;
    
        for (;;)
        {
            wahl = getKey();
        }
        fclose (fo);
    }
    
    //---------------------------------------------------------------------------------------------
    
    int getKey()
    {
        int x = 0;
        int len = 0;
        int Pos =0;
        int k = 0;
    
        int result=getch();
    
        if (result==0)
        {
            result=256+getch();
        }
        else
            k = result;
    
        fflush(stdin);
        //Pos = len = strlen(Help);
    
        switch (result)
        {
        case 72:
    
        if(Menue == 0)
            {
            scrn.Y--;
            if (scrn.Y < 0)
                scrn.Y = 0;
            //gotoxy(scrn.X, scrn.Y);
            }
    
            if(Menue == 1)
            {
                scrn.Y = scrn.Y - 2;
                if (scrn.Y < 0)
                    scrn.Y = 0;
            }
    
            break;
        case 75:
            scrn.X--;
            if (scrn.X < 0)
                scrn.X = 0;
            // gotoxy(scrn.X--, scrn.Y );
            break;
        case 77:
            scrn.X++;
            if (scrn.X > 79)
                scrn.X = 79;
            //gotoxy(scrn.X, scrn.Y );
            break;
        case 80:
            scrn.Y++;
            if (scrn.Y > 25)
                scrn.Y = 25;
            //gotoxy(scrn.X, scrn.Y);
            break;
    
        case 97: //ALT/A
            system ("cls");
            AdressMenu(0,0);
            Menue = 1;
            break;
    
        case 115: //  ALT/S
            fo = fopen ("kundendatei.txt", "a+");
            if (fo == NULL)
            {
                printf ("Die Datei existiert nicht, sie wird jetzt angelegt!");
                fo = fopen ("kundendatei.txt", "w");
            }
            fprintf (fo, "%s %s %s %d %d %s %d %d %d %s\n", kunden[nr].kundenvorname, kunden[nr].kundennachname, kunden[nr].kundenstrasse, kunden[nr].kundenhausnr, kunden[nr].kundenplz, kunden[nr].kundenort, kunden[nr].kundentelefon, kunden[nr].kundenfax, kunden[nr].kundennummer, timestr);
            nr++;
            fclose (fo);
            break;
    
        case 315: //F1
            system ("cls");
            AdressMenu(0,0);
            Menue = 1;
            break;
    
        case 317: //F3
            system("cls");
            BestellMenu(0,0);
            Menue = 2;
            break;
    
        case 318: //F4
            system("cls");
            LagerMenu(0,0);
            Menue = 3;
            break;
    
        case ESC:
            system("cls");
            if (Menue == 0)
                exit (0);
            HauptMenue(0,0);
            Menue = 0;
            break;
    
        case VK_RETURN:
            break;
        case VK_BACK:
            break;
    
        default:
            return result;
            break;
        }
    
        SetConsoleTextAttribute(hStdOut, FOREGROUND_BLUE | FOREGROUND_GREEN | BACKGROUND_RED | FOREGROUND_INTENSITY);//| FOREGROUND_GREEN | BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED
        gotoxy(5,23);
        for (x = 5; x < 75; x++)
            printf(" ");
    
        gotoxy(7,23);
        printf("X = %d , Y = %d Taste = %d \t %s", scrn.X,scrn.Y,result,timestr);
    
        gotoxy(scrn.X,scrn.Y);
        SetConsoleTextAttribute(hStdOut, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY);//| FOREGROUND_GREEN | BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED
        return result;
    }
    
    void HauptMenue(int W,int Color)
    {
        int y=0;
        switch (W)
        {
        case 0:
            for (y=0; y < 25; y++)
            {
                gotoxy(0,y);
                printf("%s",haupt_menu[y]);
            }
            break;
        }
        scrn.X = -1;
        scrn.Y = -1;
        gotoxy(scrn.X,scrn.Y);
    }
    
    void AdressMenu(int W,int Color)
    {
        int posX=0;
        int posY=0;
        int y=0;
        switch (W)
        {
        case 0:
            for (y=0; y < 25; y++)
            {
                gotoxy(2,y);
                printf("%s",Adress_menu[y]);
            }
            break;
    
        }
    
            SetConsoleTextAttribute(hStdOut, FOREGROUND_BLUE | FOREGROUND_GREEN | BACKGROUND_RED | FOREGROUND_INTENSITY);
            gotoxy(38,5);
            printf("%s","ESC");
            gotoxy(54,5);
            printf("%s","ALT/S");
            gotoxy(21,8);
            printf ("%s", "ALT/A");
            gotoxy(44,8);
            printf ("%s", "ALT/U");
            gotoxy(69,8);
            printf ("%s", "ALT/L");
            SetConsoleTextAttribute(hStdOut, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
    
            scrn.X = 15;
            scrn.Y = 11;
            gotoxy(scrn.X,scrn.Y);
            posX = scrn.X;
            posY = scrn.Y;
            printf ("MenueKoord= %d", MenueKoord[1][2]);
    
    }
    
    void BestellMenu(int W,int Color)
    {
        int y=0;
        switch (W)
        {
        case 0:
            for (y=0; y < 25; y++)
            {
                gotoxy(2,y);
                printf("%s",bestell_menu[y]);
            }
            break;
        }
    }
    
    void LagerMenu(int W, int Color)
    {
        int y=0;
        switch (W)
        {
        case 0:
            for (y=0; y < 25; y++)
            {
                gotoxy(2,y);
                printf("%s", lager_menu[y]);
            }
            break;
        }
    }
    
    /*
      SetConsoleTextAttribute(hStdOut, FOREGROUND_BLUE | FOREGROUND_GREEN | BACKGROUND_RED | FOREGROUND_INTENSITY);
      gotoxy(8,5);
      printf("%s","ESC");
      gotoxy(23,5);
      printf("%s","ALT/S");
      SetConsoleTextAttribute(hStdOut, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
      scrn.X = 15;
      scrn.Y = 7;
      gotoxy(scrn.X,scrn.Y);
    */
    
    void gotoxy(int xpos, int ypos)
    {
        COORD scrn;
        HANDLE hOuput = GetStdHandle(STD_OUTPUT_HANDLE);
        scrn.X = xpos;
        scrn.Y = ypos;
        SetConsoleCursorPosition(hOuput,scrn);
    }
    


  • Hallo,

    XcrAckX schrieb:

    Wenn ich z.B versuche mir den inhalt von MenueKoord[1][1] mit printf ausgeben zu
    lassen, bekomme ich immer nur die speicheradresse oder eine sonstige int zahl
    (786447), weiß nicht genau was sie darstellen soll!!

    COORD ist eine typisierte Struktur.
    http://msdn.microsoft.com/en-us/library/ms682119(VS.85).aspx (Hallo mngbd)

    An die x/y Werte kommst du mit der üblichen Strukturschreibweise, z.B.

    MenueKoord[1][1].X, MenueKoord[1][1].Y
    

    Gruß,
    B.B.



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum ANSI C in das Forum DOS und Win32-Konsole verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • OK ich danke dir vielmals.
    Werde gleich ausprobieren, das umzusetzen.
    Gruß XcrAckX



  • spätestens hier hätte man sehen können wie man COORD nutzt

    void gotoxy(int xpos, int ypos)
    {
    COORD scrn;
    HANDLE hOuput = GetStdHandle(STD_OUTPUT_HANDLE);
    scrn.X = xpos;
    scrn.Y = ypos;
    SetConsoleCursorPosition(hOuput,scrn);
    }

    structur in windows.h



  • Wenn etwas wie BOOL, COORD in Grossbuchstaben im C-Quelltext steht, ist oft Microsoft dran beteiligt. Also kann ein Blick in das MSDN nicht schaden.

    Die C-Compiler schlucken ja vieles - ist die Sammlung der Header in Menue.h denn optimal - ich hätte das aus dem Bauch raus - nur die Header die in Menue.h benutzt werden dort platziert und die anderen dort wo sie benötigt werden.

    MfG f.-th.



  • Hab mir das noch mal durchgelesen -
    du möchtest ANSI C lernen -
    der Quelltext hat aber einige Besonderheiten, die auf Mircisoft-C hinweisen und unter ANSI nicht immer funktionieren müssen.
    Aber das können dir andere besser erklären - ich mach ja C nur so zum Spass 😉

    MfG f.-th.



  • bedeutet doch nicht das man nur auf den befehlssatz von ANSI C
    zurück greifen darf. sonst wäre so ein befehl wohl nicht möglich.
    GetStdHandle(STD_OUTPUT_HANDLE);
    Es ist halt meiner meinug nach sinnvoll die ersten erfahrungen in c
    unter DOS zumachen.



  • [quote="SeppJ"]786447 = 12*2^16 + 15. Das ist der Inhalt von MenueKoord[0][1], falls COORD vom Typ short ist (und noch ein paar andere Annahmen gelten die ich jetzt mal stillschweigend voraussetze). Ob signed oder unsigned kann ich aber nicht sagen - da Koordinaten gewöhnlich auch negativ sein können wird es wahrscheinlich ein signed Typ sein.
    quote]
    Also die rechnung sagt mir nix, aber der inhalt was immer das bedeutet,
    wären dann die Koordinaten.



  • Ich dachte da mit Microsoft-C weniger an das von dir erwähnte, sondern eher an so was:

    fflush(stdin);
    

    MfG f.-th.



  • Ja stimmt ist keine sichere sache


Anmelden zum Antworten