Ich habe jetzt mal (wieder) angefangen C zu lernen. Bin nun bei den mehrdymensionalen Arrays angelangt und habe dazu eine kleine Übung geschrieben. Es funktioniert alles bis auf ein kleines aber wichtiges Detail...
Das Ziel des Programmes ist es ein mehrdymensionales Array auszulesen und je nach Wert im Array ein anderes Symbol auszugeben. Nun habe ich eine kleine Funktion geschrieben, welche das gesamte ausliest und zeichnet. Nur will die Funktion, das ich ihr die Grösse einer Dimension des Arrays mitgebe. Nun war aber mein Ziel, dass das Programm keinerlei Angaben benötigt sondern die Grösse selber ausrechnet.
Ist es möglich entweder die in main() ausgerechnete Grösse global bekannt zu machen oder der Funktion erlauben auch ohne feste Grösse zu funktionieren?
Mein Quellcode:
Code: Alles auswählen
// Grundfunktionen wie printf()
#include <stdio.h>
// Für die Wurzelberechnung
#include <math.h>
// Gegen das ewig lange schreiben von unsigned..... nur noch lint :)
typedef unsigned short int lint;
// Funktionskopf zum Zeichnen der Felder
void zeichne_feld(lint (*feld)[], lint anzahl);
int main(int argc, char *argv[])
{
// Zwei Dimensionales Array (Insgesamt 9 Felder)
lint karte[3][3] = {{1,0,1},{0,1,0},{1,0,1}};
// Anzahl der Felder der Dimensionen im Array bestimmen (--> Hier wird die Grösse ausgerechnet <--)
lint anzahl_felder = sqrt(sizeof(karte) / sizeof(lint));
// Zeiger für Array mit der bestimmten Grösse erstellen
lint (*zgr)[anzahl_felder];
// Zeiger dem Array zuweisen
zgr=karte;
// Funktion aufrufen
zeichne_feld(zgr, anzahl_felder);
return 0;
}
void zeichne_feld(lint (*feld)[3](--> Hier muss ich einen festen Wert eingeben<--), lint anzahl) {
// Die zwei Variablen auf 0 setzen
lint x=0,y=0;
// Solange nicht alle Linien gezeichnet wurden
for(x;x<anzahl;x++) {
// Solange nicht alle Felder einer Linie gezeichnet wurden
for(y;y<anzahl;y++) {
// Welches Symbol soll gezeichnet werden
switch(feld[x][y]) {
case 0:
printf("O");
break;
case 1:
printf("X");
break;
default:
printf("\?");
break;
}
}
// Nach einer Linie y (Feld) wieder auf 0 setzen
y=0;
// Und eine Linie runter gehen
printf("\n");
}
}