[GELÖST] Zahlen mit Dezimalpunkt aus Datei einlesen



  • So, ich glaube das mit den Dereferenzierungen habe ich verstanden... (Mensch war das eine schwere Geburt 🙄 )
    Hatte vorher noch nie was mit Doppelzeigern zu tun... aber jetzt habe ich die funktionsweise glaube ich größtenteils verstanden...!

    Einzige was ich noch nicht ganz gerallt habe! Warum wird bei einem doppelpointer die Adresse beim realloc geändert und bei normalen Pointer, wie ich es am Anfang hatte, nicht? 😕

    Danke für deine Geduld Dirk!!!!!!! 👍 👍 👍

    Hier das Programm falls es jemanden interessiert!!!

    //MAIN
    int main(void)
    {
    	double *werteX;
    	double *werteY;
    
    	werteX = calloc(ARRAYSIZE, sizeof(double));
    	werteY = calloc(ARRAYSIZE, sizeof(double));
    
    	hauptmenue(&werteX, &werteY);
    
    }
    
    //HAUPTMENÜ
    void hauptmenue(double **werteX, double **werteY){
    	int auswahl, anzahl = 0;
    
    	do{
    		printf("\n"
    			"Berechnung einer Ausgleichsgeraden\n"
    			"==================================\n"
    			"(1) Daten aufnehmen\n"
    			"(2) Daten ausgeben\n"
    			"(3) Daten korrigieren\n"
    			"(4) Daten speichern\n"
    			"(5) Daten laden\n"
    			"(6) Ausgleichsgerade ermitteln\n"
    			"(0) Ende\n"
    			"\n"
    			"Treffen Sie eine Wahl: "		
    			);
    
    		scanf("%i", &auswahl);
    		while (getchar() != '\n');
    
    		switch (auswahl){
    		case 1: anzahl = menue1(werteX, werteY); break; 
    		case 2: menue2(werteX, werteY, anzahl); break;
    		case 3: menue3(werteX, werteY, anzahl); break;
    		case 4: menue4(werteX, werteY, anzahl); break;
    		case 5: anzahl = menue5(werteX, werteY); break;
    		case 6: menue6(werteX, werteY, anzahl); break;
    		default: break;
    		}
    
    	} while (auswahl != 0);
    
    }
    
    //Menü Daten aufnehmen 
    int menue1(double **werteX, double **werteY){
    	int counter = 0;
    
    	double *test1, *test2;
    
    	printf("\n"
    		"(1) Daten aufnehmen: (Ende ersten Punkt noch einmal eingeben)\n"
    		"_____________________________________________________________\n"
    		"\n");
    
    	printf("menue 1: \n%p %p\n", werteX, werteY);
    
    	do{	
    		printf("werteX: %p | *werteX %p | &(*werteX)[counter] %p | counter %d\n", werteX, *werteX, &(*werteX)[counter], counter);
    		//X-Koordinate einlesen	
    		printf("%i. Punkt: x: ", counter + 1);
    		scanf("%lf", &werteX[0][counter]);
    		while (getchar() != '\n');
    
    		//Y-Koordinate einlesen	
    		printf("%i. Punkt: y: ", counter + 1);
    		scanf("%lf", &werteY[0][counter]);
    		while (getchar() != '\n');
    
    		counter++;
    
    		printf("\n%i; %i\n", counter, ARRAYSIZE);
    
    		if (counter >= ARRAYSIZE){
    			test1 = realloc(*werteX, (counter + 1) * sizeof(double));
    			test2 = realloc(*werteY, (counter + 1) * sizeof(double));
    
    			if (test1 != NULL && test2 != NULL){
    				*werteX = test1;
    				*werteY = test2;
    			}
    
    		}
    
    	} while (counter <= 1 || werteX[0][0] != werteX[0][counter - 1] || werteY[0][0] != werteY[0][counter - 1]);
    
    	return counter - 1;
    }
    


  • ph87 schrieb:

    void hauptmenue(){
        int auswahl, anzahl = 0;
     
        double *werteX;
        double *werteY; 
    ...
       case 1: anzahl = menue1(werteX, werteY); break;
    ...
    }
    
    int menue1(double **werteX, double **werteY){
    

    Wenn du es immer noch nicht schaffst, auf die Typen zu achten und deinem Compiler die Warnungen beizubringen, ist C wohl nichts für dich.



  • ph87 schrieb:

    In bearbeitung...

    Oh, jetzt hast du einen Rückzieher gemacht.
    Zu spät gesehen.



  • DirkB schrieb:

    ph87 schrieb:

    In bearbeitung...

    Oh, jetzt hast du einen Rückzieher gemacht.
    Zu spät gesehen.

    Wie schon gesagt/geschrieben! re-/dereferenzierung hatte ich noch nie gelernt...! Aber lies mal bitte meinen letzten Post... 😉



  • ph87 schrieb:

    Einzige was ich noch nicht ganz gerallt habe! Warum wird bei einem doppelpointer die Adresse beim realloc geändert und bei normalen Pointer, wie ich es am Anfang hatte, nicht? 😕

    Lies dir noch mal http://www.c-plusplus.net/forum/p2387236#2387236 durch.

    Ein Zeiger ist keine mystische Sache, mit der due alles ändern kannst.

    Es ist auch nur eine Variable, die aber keine Zahl oder Zeichen aufnimmt, sondern eine Adresse.

    Funktionsparameter werden immer als Kopie übergeben. Auch die Zeiger.
    Somit kennt die Funktion die Adresse, aber nicht den Ort, wo diese abgelegt ist. Aber genau das willst du beim realloc ändern.


Anmelden zum Antworten