Pointer Arraz an Funktion übergeben



  • Das kann auch an der Schreibfunktion liegen.
    Es sollte zumindest irgend etwas in der Datei stehen.

    Zeig Code, sonst kann dir hier keiner helfen.



  • void LinReg(int n, double *x, double *y, double *a0, double *a1){
    
    char buffer[30];
    DWORD retval; 
    double x1=0,x12=0,y1=0,x1y1=0,e, xn, yn;
    
    HANDLE hDataFile = CreateFile("test.txt", GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
    
    for(int i=0;i<n;i++){
    
      xn = x[i]; // Bei Übergabe schief gegangen da wahrscheinlich null
      yn = y[i];
      sprintf(buffer, "%f\n", x[i]);
      WriteFile(hDataFile, buffer, strlen(buffer), &retval, NULL); 
    
      //x1+=xn;
      //y1+=yn;
    
     // x1y1+=xn*yn;
     // x12+=xn*xn;
    
    }
    CloseHandle(hDataFile);
    /*
    *a1=((n*x1y1)-(x1*y1))/((n*x12)-(x1*x1));
    *a0=y1/n-(*a1)*x1/n;
    
    e=*y-(*a0)-(*a1)*(*x);
    *a0+=e;
    */
    }
    

    Der Hauptfunktion ist wie auf seite 2 geblieben bis auf die von dir genannten schönheitskorrekturen.



  • Bist du dir sicher, dass CreateFile erfolgreich war?
    Schaust du dir auch die richtige test.txt an?
    (Das wär nicht das erste mal, dass jemand im falschen Verzeichnis sucht)

    Was steht denn nun in test.txt drin?

    Hat das einen Grund warum du nicht die f-Funktionen aus stdio.h nimmst?



  • also es ist die richtige file habe ich auch im restlichen programm genau so und da funzt das auch. Das ganze mache ich so da ich mit owl next arbeite also auf die winapi zugreife. Es ist schon strange, die datei zeigt 0 byte an.



  • Xeno1987 schrieb:

    ..., die datei zeigt 0 byte an.

    Daraus kannst du nicht schließen, in den Daten wäre nichts drin.
    Dein sprintf schreibt etwas in den buffer. Und wenn es "0.0\n" ist.
    Nur der Inhalt kommt nicht in die Datei. Demnach liegt das Problem bei den Dateioperationen.



  • jetzt weiss ich auch warum da nichts stand weil ich die Matrixstrucktur falsch ausgelesen habe, die schleifen waren richtig aber dass x[i] ist flasch, da dort die anzahl reihe mal spalte stehen sollte also ne weitere for schleife für die anzahl aller elemte der matrix --> x[cols*rows] = cvmget(i,cols-1)



  • Das hatte ich gemeint mit "es bleibt nur eine Schleife übrig".
    Aber deine Lösung ist auch falsch.
    Du brauchst eindeutige Wertefür den Index. (z.B. i=3, j=2 und i=2, j=3 führen zum selben Index).

    Nur, im Speicher steht irgendetwas, was sprinft in den buffer schreibt. Leer bleibt der nicht. Du hast halt nur falsche Werte gehabt.


Anmelden zum Antworten