funktionsübergabe von 2 dimensionalem array über mehrere funktionen
-
moin
ok, hier ist es ein reines verständniss problem, die professoren haben mich da
ein wenig verwirrt und daher hab ich halt mal was ausprobiert.Problemstellung:
Es wird aus einer Textdatei paarweise die X und Y Koordinate gelesen. Diese
sollen in einen int umgewandelt werden.ok, hier mal mein Lösungsvorschlag. Das Umwandeln der zahlen ist kein problem,
das hab ich mal mit vordefinierten werten überprüft. nur glaub ich dass ich hier
dass ich einen übergabefehler der arrays begonnen habe. Was die Optimierung
meiner Syntax betrifft, bitte ich euch diese mir zu überlassen, sonst lern ich
ja nix. sicherlich gehts besser, aber darauf sollte ich doch selber kommen.mir geht es nur darum, dass ich bei der ausgabe im main die falschen Zahlen
ausgebe. Das heißt ich muss irgendwo einen Fehler bei der übergabe begonnen haben.#include "files.h" #include "def.h" int main(void){ const char *string[5]; char string2[25][100]; int i; int XY[11][2]; string[0]="Hallo"; string[1]="Ernst!"; string[2]="Hehe!"; string[3]="Alles"; string[4]="Gute!"; //writeFile(string); read_XY_File(XY, "dat.txt"); for(i=0; i<10; i++) printf("X: %d | Y: %d\n", XY[i][0], XY[i][1]); printf("\n\nAnzahl Semilikone: %d", countSemi("dat.txt")); getch(); return 0; } void writeFile(const char *string[5], char file[]){ FILE *dat; int i; dat=fopen((const char *)file,"w"); if(dat == NULL){ printf("Fehler beim %cffnen!\n", OE); exit(-1); } for(i=0; i<5; i++){ fputs(string[i], dat); fputs(";", dat); } fclose(dat); } void read_XY_File(int XY[][2], char file[]){ FILE* dat; int i, j=0, x; char help='i'; char text[6]; int pos[2]; dat=fopen((const char *) file,"r"); if(dat == NULL){ printf("Fehler beim %cffnen!\n", OE); exit(-1); } for(i=0; help != '#'; i++){ for(x=0; x<2 && help != '#'; x++){ do{ help=fgetc(dat); text[j]=help; j++; }while(help != ';' && help != '#'); j=0; Wc2i(&pos[x],text); XY[i][x]=pos[x]; } } fclose(dat); } int countSemi(char *file){ FILE* dat; int i=0; char help='0'; dat=fopen((const char *)file, "r"); if(dat == NULL) exit(-2); while(help != '#'){ help=fgetc(dat); if(help==';') i++; } fclose(dat); return i; } void Wc2i(int *zahl, char text[]){ int leng; int mult=1; for(leng=0; text[leng+1]!='#' && text[leng+1]!=';'; leng++); for(leng; leng > -1; leng--){ if(text[leng] < 48 || text[leng] > 58) break; (*zahl)+=((int)text[leng]-48)*mult; mult*=10; } }
hoffe auf hilfe...
[EDIT]: der Fehler tritt in der Funktion Read_XY_File() auf... bei der übergabe
des arrays...gruß
ITEDVO
-
Was sagt denn
printf("XY main: %p\n", XY); //in main() printf("XY read: %p\n", XY); //in read_XY_File()
?
-
beides das gleiche...
jetzt hab ichs ein wenig anders gelöst...
void read_XY_File(int XY[][2], char file[]){ FILE* dat; int i, j=0, x; char help='i'; char text[6]; int pos[2]; int zahl=0; dat=fopen((const char *) file,"r"); if(dat == NULL){ printf("Fehler beim %cffnen!\n", OE); exit(-1); } for(i=0; help != '#'; i++){ for(x=0; x<2 && help != '#'; x++){ do{ help=fgetc(dat); text[j]=help; j++; }while(help != ';' && help != '#'); j=0; Wc2i(&zahl,text); // hier, gibts ne andere möglichkeit? XY[i][x]=zahl; zahl=0; } } fclose(dat); }
es wird richtig eingelesen und richtig ausgegeben... nur möchte ich hier
eigentlich keine hilfsvariable verwenden.gibts ne andere möglichkeit?
-
Dann gib doch in Wc2i() die Zahl mit return zurück.
int Wc2i(char text[]);
-
ich hirnampotierter trottel... klar dass da falsch ausgegeben wurde xD schaut
euch mal im main XY[10][2] an, das is ja nich initialisiert, sprich der wert
jedes einzelnen index´s ist undefiniert, dass heisst es wurde jedes mal zu dem
undefinierten wert der jeweilige eingelesene wert dazuaddiert xD
mensch maier! und für sowas banales
wende ich mich an euch... sorry für die aufregung...danke dirk, so wärs auch ne möglichkeit... hatte ich auch schon überlegt... =b
-
Für's Konvertieren würde ich's mal mit atoi() versuchen
So'n hardcodet Zeugz is nich' gut...
Warum geht text[j] = fgetc(dat) nich' ?
In der while-Schleife einfach statt 'help' einfach 'text[j]' einsetzen
-
...achso jetzt verstehe ich
Es geht um die Funktionsübergabe...
um die Aufregung gänzlich aufkommen zu lassen...tata...übergebe doch einfach 'Wc2i(&XY[i][x],text)'
-
...achso jetzt verstehe ich
Es geht um die Funktionsübergabe...
um die Aufregung gänzlich aufkommen zu lassen...tata...übergebe doch einfach 'Wc2i(&XY[i][x],text)'
-
ok, lies bitte nächstes mal alles, und nicht nur meinen letzten post =b
deine lösung war meine ausgangsposition... nur war es kein syntax fehler sondern
ein semantikfehler... und weiteres hättest du dann gleich gesehen, wenn du
alles gelesen hättest, dass ich optimierungen selber durchführen werde...weiteres: die variable help werde ich später (wenn die funktion gänzlich fertig
ist) noch für etwas verwenden =b desswegen help =b
-
bitte nicht aufregen
bin einfach etwas undiszipliniert für ein Forum ... werde mich bemühen alles zu lesen und zu verstehen, bevor ich antworte ... schwör X
-
war keine aufregung, nur eine übermüdete und hinweisende antwort =b ich weiß, du
meinst es gut =b