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


Anmelden zum Antworten