Anfängerfrage zu einer printf-Zeile im Programm

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
iRob
Beiträge: 9
Registriert: Mi Jan 27, 2021 10:50 am

Anfängerfrage zu einer printf-Zeile im Programm

Beitrag von iRob » Mi Jan 27, 2021 11:18 am

Hi Leute,

bin jetzt seit 3 Monaten im autodidaktischen Grundkurs C (c-howto.de) und verstehe eine Programm-Zeile aus einer Aufgabe/Lösung von Arrays nicht, da sie vom Autoren nicht erklärt wurde. Es wäre hilfreich, wenn mir jemand die Zeile kurz und mit einfachen Worten erklären würde, weil ich sonst einfach nicht weiter komme.
Im Anhang findet ihr einen Screenshot von einem simplen Spiel-Programm. Es handelt sich um die Programmzeile 70: printf("%d", *(field+i*8+j));
Nachtrag: Das mit dem Screenshot klappt leider nicht, von daher habe ich den Link zum Programm kopiert: https://www.c-howto.de/tutorial/arrays- ... ng-teil-2/

Vielen Dank für eure Hilfe,
Gruß iRob

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

Re: Anfängerfrage zu einer printf-Zeile im Programm

Beitrag von Xin » Mi Jan 27, 2021 11:31 am

Moin iRob,
iRob hat geschrieben:
Mi Jan 27, 2021 11:18 am
Im Anhang findet ihr einen Screenshot von einem simplen Spiel-Programm. Es handelt sich um die Programmzeile 70: printf("%d", *(field+i*8+j));
Ich finde zwar keinen Anhang, aber Einsteigerliteratur und eine solche Zeile dürften schon halbwegs erklären, was da passiert. :-D

Code: Alles auswählen

 printf("%d", *(field+i*8+j) );
printf soll hier eine Zahl entsprechend des Formatstrings ausgeben.

Was für Dich vermutlich unverständlicher ist, ist das hier: *(field+i*8+j)
field ist vermutlich ein Array von char oder short oder int. Also irgendwas mit Zahlen. In einem Array sind die Zahlen alle hintereinander angeordnet.

Das ganze steckt innerhalb von zwei for-Schleifen, die über i und j laufen, dabei ist i die Zeile und j die Spalte. Jede Zeile hat 8 Spalten.

Der Entwickler versucht also die Adresse rauszufinden, wenn am Anfang vom field ist und dann i Zeilen überspringt, die jeweils 8 Zahlen lang sind. Anschließend addiert man noch die Spalte auf, die man erreichen möchte und schon hat man die Adresse der gewünschten Koordinate. Das ganze in Klammern zum Ausrechnen und dann wird auf das Ergebnis zugegriffen mit dem *-Operator, der davor steht. Es wird also die Zahl genommen, die in der Adresse steht, die man da ausgerechnet hat.

Eine andere, gleichwertige und eher für Anfänger-Kurse typischere Schreibweise wäre field[i*8+j].

Code: Alles auswählen

printf("%d", field[i*8+j] );
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.

iRob
Beiträge: 9
Registriert: Mi Jan 27, 2021 10:50 am

Re: Anfängerfrage zu einer printf-Zeile im Programm

Beitrag von iRob » Mi Jan 27, 2021 12:00 pm

Hey Xin,

danke für deine Erklärung. Werde jetzt versuchen, das zu verstehen.

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

Re: Anfängerfrage zu einer printf-Zeile im Programm

Beitrag von Xin » Mi Jan 27, 2021 12:49 pm

Vielleicht eine andere Perspektive zu Arrays: Link
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.

iRob
Beiträge: 9
Registriert: Mi Jan 27, 2021 10:50 am

Re: Anfängerfrage zu einer printf-Zeile im Programm

Beitrag von iRob » Do Jan 28, 2021 8:47 am

Habe gestern schon angefangen, euer Tutorial durchzuarbeiten. Das ist wirklich gut und verständlich gemacht.

Eine Frage noch zu Beiträgen: ich wollte ja gestern den Screenshot zum Beitrag hochladen, allerdings hat das nicht funktioniert. Ich habe unter dem Beitrag, beim Erstellen, den Button gedrückt (ich glaube, "Datei hinzufügen". Kann das gerade nicht sehen), bin in meiner Datei auf den Screenshot gegangen, danach ging es automatisch wieder zurück zum Beitrag..., aber es wurde keine Datei nach dem Absenden ausgewählt bzw. hochgeladen. In den FAQ konnte ich leider zu dem Thema nichts finden. Hast du einen Tipp für mich? Ich arbeite hier derzeit über ein Tablet.

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

Re: Anfängerfrage zu einer printf-Zeile im Programm

Beitrag von Xin » Do Jan 28, 2021 9:42 am

iRob hat geschrieben:
Do Jan 28, 2021 8:47 am
Habe gestern schon angefangen, euer Tutorial durchzuarbeiten. Das ist wirklich gut und verständlich gemacht.
Besten Dank, ich werde es dem Autor ausrichten. :-D

Hinweise gerne an mich, wenn etwas nicht verbessert werden könnte oder eben doch nicht so verständlich war.
iRob hat geschrieben:
Do Jan 28, 2021 8:47 am
Eine Frage noch zu Beiträgen: ich wollte ja gestern den Screenshot zum Beitrag hochladen, allerdings hat das nicht funktioniert. Ich habe unter dem Beitrag, beim Erstellen, den Button gedrückt (ich glaube, "Datei hinzufügen". Kann das gerade nicht sehen), bin in meiner Datei auf den Screenshot gegangen, danach ging es automatisch wieder zurück zum Beitrag..., aber es wurde keine Datei nach dem Absenden ausgewählt bzw. hochgeladen. In den FAQ konnte ich leider zu dem Thema nichts finden. Hast du einen Tipp für mich? Ich arbeite hier derzeit über ein Tablet.
Ich habe das gerade ausprobiert und tada: :-)
Fahrrad_klein.jpg
Allerdings ist das nicht der erste Upload gewesen, alles über 200kb macht genau das, was Du beschrieben hast. Ich habe mal nachgeguckt, die Grenze liegt bei 256kb, was mir für den Seitenaufbau auch sinnvoll erscheint, zumindest, was Bilder angeht. Ich muss mal gucken, ob uns da eine Meldung abhanden kommt oder dass wir da einen Hinweis in den Tab 'Dateianhänge' reinholen.
Dateianhänge werden selten genutzt, so hat sich das Problem bisher so noch nicht ergeben.

Bzgl: Tablet... die Seite ist nicht gerade Tablet-optimiert... auch eine Dauerbaustelle. :?
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
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.

Antworten