Pointer in 2 dimensionalem Array

Schnelle objektorientierte, kompilierende Programmiersprache.
Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Pointer in 2 dimensionalem Array

Beitrag von Xin » Fr Jan 06, 2012 6:02 pm

DANrulz81 hat geschrieben:Kann man for-Schleifen bei bestimmten Bedingungen abbrechen? :roll:
Klar - Du schreibst die Bedingung z.B. oben rein

Code: Alles auswählen

for( ...; -Bedingung-; ...)
oder fragst halt mitten drin

Code: Alles auswählen

for( ;; )
{
  if( -Bedingung- )
    break;
}
siehe: http://www.proggen.org/doku.php?id=c:tutorial:loops
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

DANrulz81
Beiträge: 53
Registriert: Fr Dez 23, 2011 9:40 pm

Re: Pointer in 2 dimensionalem Array

Beitrag von DANrulz81 » Fr Jan 06, 2012 6:05 pm

Oh, du warst mit der Antwort schneller als ich mit dem Edit.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Pointer in 2 dimensionalem Array

Beitrag von Xin » Fr Jan 06, 2012 6:41 pm

DANrulz81 hat geschrieben:So hab ich das jetzt, ist aber leider nicht so, wie ich das wollte:

Code: Alles auswählen

    for(i=0; i<24; i++) {
	// Schleife fuer Spalten, X-Achse
        for(j=0; j<24&&*zeiger!=3; j++) {
            printf("%i ", brett[i][j]);
            zeiger++;
        }
        printf("\n");
    }
    zeiger=&brett[0][0];}
Was heißt zeiger++?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

DANrulz81
Beiträge: 53
Registriert: Fr Dez 23, 2011 9:40 pm

Re: Pointer in 2 dimensionalem Array

Beitrag von DANrulz81 » Fr Jan 06, 2012 11:18 pm

Was heißt zeiger++?
Der Zeiger wird inkrementiert. Ich muss den ja hoch zählen, um die einzelnen Zeichen solange zu verfolgen, bis *zeiger=3 ist. Deshalb hab ich ja das &&*zeiger!=3 als Bedingung in der Schleife.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Pointer in 2 dimensionalem Array

Beitrag von Xin » Sa Jan 07, 2012 11:37 am

DANrulz81 hat geschrieben:
Was heißt zeiger++?
Der Zeiger wird inkrementiert. Ich muss den ja hoch zählen, um die einzelnen Zeichen solange zu verfolgen, bis *zeiger=3 ist. Deshalb hab ich ja das &&*zeiger!=3 als Bedingung in der Schleife.
Du machst aus einer zweidimensionalen Eingabe eine eindimensionale. Außerdem hast Du eine verschachtelte Schleife, um die Koordinaten zu durchlaufen und gleichzeitig irgendeine andere, um zu suchen.

Entscheide Dich. Wirf "zeiger" weg und arbeite ausschließlich mit brett[][].
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

DANrulz81
Beiträge: 53
Registriert: Fr Dez 23, 2011 9:40 pm

Re: Pointer in 2 dimensionalem Array

Beitrag von DANrulz81 » Sa Jan 07, 2012 6:37 pm

O.k. ichhab nochmal dran gearbeitet, allerdings bekomm ich ab der Zeile 12, in der die 3 stehen sollte, keine Ausgabe mehr, erst ab der nächsten Zeile wieder:

Code: Alles auswählen

#include <stdio.h>

int main(void)
{
    int brett[24][24] = {0};

    brett[2][1] = 7;
    brett[4][2] = 8;
    brett[3][5] = 9;
    brett[12][12] = 3;

    int i, j;

    for(i=0; i<24; i++) 
        {
        for(j=0; j<24&&brett[i][j]!=3; j++) 
            {
            printf("%i ", brett[i][j]);
            }
        printf("\n");
        }
    return 0;
}

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Pointer in 2 dimensionalem Array

Beitrag von Xin » So Jan 08, 2012 12:16 pm

DANrulz81 hat geschrieben:O.k. ichhab nochmal dran gearbeitet, allerdings bekomm ich ab der Zeile 12, in der die 3 stehen sollte, keine Ausgabe mehr, erst ab der nächsten Zeile wieder:

Code: Alles auswählen

{
    for(i=0; i<24; i++) 
        {
        for(j=0; j<24&&brett[i][j]!=3; j++)   // <--- You asked for it!
            {
            printf("%i ", brett[i][j]);
            }
        printf("\n");
        }
}
Die innere Schleife endet, wenn brett[j] == 3 ist, denn dann ist != 3 false.

Hier ist eher die Frage, was Du eigentlich programmieren willst? Willst Du die Koordinate finden, die den Wert 3 beinhaltet oder willst Du das Spielfeld ausgeben?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

DANrulz81
Beiträge: 53
Registriert: Fr Dez 23, 2011 9:40 pm

Re: Pointer in 2 dimensionalem Array

Beitrag von DANrulz81 » So Jan 08, 2012 5:38 pm

Eigentlich wollte ich die Koordinate finden, ursprünglich ja über den Zeiger.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Pointer in 2 dimensionalem Array

Beitrag von Xin » So Jan 08, 2012 9:09 pm

DANrulz81 hat geschrieben:Eigentlich wollte ich die Koordinate finden, ursprünglich ja über den Zeiger.
Die Koordinate hast Du gefunden. Nun musst Du die zweite Schleife verlassen.

Das mit dem Zeiger würde ich sein lassen (auch in meinem Programmen mache ich das hier nicht), das sorgt für mehr Verwirrung als alles andere.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

DANrulz81
Beiträge: 53
Registriert: Fr Dez 23, 2011 9:40 pm

Re: Pointer in 2 dimensionalem Array

Beitrag von DANrulz81 » Mo Jan 09, 2012 8:33 pm

Also, ich hab das jetzt mal so gelöst:

Code: Alles auswählen

#include <stdio.h>

int main(void)
{
    int brett[24][24] = {0};

    brett[2][1] = 7;
    brett[4][2] = 8;
    brett[3][5] = 9;
    brett[12][12] = 3;

    int i, j;

    for(i=0; i<24; i++)
    {
        for(j=0; j<24; j++)
        {
            printf("%i ", brett[i][j]);
            if (brett[i][j]==3)
            break;
        }
        if (brett[i][j]==3)
        break;
        printf("\n");
    }
    return 0;
}
Das geht dochsicher auch eleganter, oder?

Antworten