Vektor an main übergeben
-
Hallo,
ich möchte einen Vektor (input) aus einer Funktion an main übergeben, leider bringt er mir beim kompilieren immer eine Fehlermeldung. Ich finde meinen Fehler nicht....
aktueller Stand:
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX1 50 #define ZEILENLAENGE 80 double daten_einlesen(double *); void main() { ... daten_einlesen(&input[MAX1]); } daten_einlesen(double *input1[]) { double resultat; FILE*fi,*fm; char datenfile[]= "Z:\\fahrzeugdatenfile.txt"; char zeile[ZEILENLAENGE]; double weg[MAX1], lenkwinkel[MAX1], input[MAX1]; int helper=0; //double lenk_i,ha_lenkbeiwert,l_rad,b_fzg,l_v,l_h; fi = fopen(datenfile,"r"); //Eingabefile öffnen if (fi == NULL) //Prüfung ob Eingabefile vorhanden printf("\n no input file found, please check datenfile \n\n"); while(!feof(fi)) //While Schleife solange Ende der Datei (feof) erreicht ist { fgets(zeile, ZEILENLAENGE, fi); //zeilenweise einlesen if(strchr("!*#%\n",zeile[0]) != NULL) //Zeile beginnt mit Kommentarmarke continue; //ermöglicht einen neuen Durchlauf in Zyklen ohne daß der aktuelle Durchlauf beendet werden muß resultat = sscanf(zeile, "%lf", &input[helper]); //"Zahl" in input an Stelle bufind schreiben ++helper; //erhöhen der Hilfsvariable "Buffer" } fclose(fi); return; }
-
was willst du mit [MAX1] bezwecken?
ich wage zu behaupten, dass du von arrays und pointern keine ahnung hast.
lies http://www.pronix.de/pronix-622.html
und http://www.pronix.de/pronix-623.html
-
Danke für die Antwort
mit [MAX1] will ich erreichen dass er mir maximal MAX1=50 Elemente übernimmt (zur Sicherheit). Den Array "input", den ich in der Funktion daten_einlesen erstelle und aus der Datei einlese, möchte ich an main zurückgeben, um in main mit den einzelnen Komponenten des Arrays weiterzurechnen.
-
so macht man das nicht.
lies die links, lies sie ganz.
-
aktueller Stand:
double daten_einlesen(void); void main() { ... daten_einlesen(input); } daten_einlesen(void) { double resultat; FILE*fi; char datenfile[]= "Z:\\fahrzeugdatenfile.txt"; char zeile[ZEILENLAENGE]; double input[MAX1]; int helper=0; fi = fopen(datenfile,"r"); //Eingabefile öffnen if (fi == NULL) //Prüfung ob Eingabefile vorhanden printf("\n no input file found, please check datenfile \n\n"); while(!feof(fi)) //While Schleife solange Ende der Datei (feof) erreicht ist { fgets(zeile, ZEILENLAENGE, fi); //zeilenweise einlesen if(strchr("!*#%\n",zeile[0]) != NULL) //Zeile beginnt mit Kommentarmarke continue; //ermöglicht einen neuen Durchlauf in Zyklen ohne daß der aktuelle Durchlauf beendet werden muß resultat = sscanf(zeile, "%lf", &input[helper]); //"Zahl" in input an Stelle bufind schreiben ++helper; //erhöhen der Hilfsvariable "Buffer" } fclose(fi); return input; }
Ich bekomme 3 Fehler:
#1:error C2660: 'daten_einlesen' : function does not take 1 parameters
#2:error C2556: 'int __cdecl daten_einlesen(void)' : overloaded function differs only by return type from 'double __cdecl daten_einlesen(void)'
#3:error C2371: 'daten_einlesen' : redefinition; different basic typesund der Vektor wird nicht an main() übergeben
-
-
So nach fleißigem Lesen bin ich soweit:
void manoever_einlesen(double* weg, double* lenkwinkel, char* richtung); void main() { double resultat, resultat1, i=0; float x, x1; double weg[MAX1], lenkwinkel[MAX1], input[MAX1], input1[MAX1]; char richtung[MAX1]; manoever_einlesen(weg, lenkwinkel, richtung); printf("\n\nweg[0] = %lf", weg[0]); printf("\n\nlenkwinkel[0] = %lf", lenkwinkel[0]); printf("\n\nrichtung[0] = %c", richtung[0]); printf("\n\nweg[1] = %lf", weg[1]); printf("\n\nlenkwinkel[1] = %lf", lenkwinkel[1]); printf("\n\nrichtung[1] = %c", richtung[1]); printf("\n\nweg[2] = %lf", weg[2]); printf("\n\nlenkwinkel[2] = %lf", lenkwinkel[2]); printf("\n\nrichtung[2] = %c", richtung[2]); printf("\n\nweg[3] = %lf", weg[3]); printf("\n\nlenkwinkel[3] = %lf", lenkwinkel[3]); printf("\n\nrichtung[3] = %c", richtung[3]); } void manoever_einlesen(double* weg, double* lenkwinkel, char* richtung) { FILE*fm; char datenfile[]= "C:\\steffen\\FA Studium\\_FKME\\TechnischeInformatik\\TI3\\Studienarbeit_SS06\\neu\\Files\\fahrzeugmanoeverfile.txt"; char zeile1[ZEILENLAENGE]; double input[MAX1], resultat1; int helper1=0; fm = fopen(datenfile,"r"); //Manöverfile öffnen if (fm == NULL) //Prüfung ob Eingabefile vorhanden printf("\n no input file found, please check manoeverfile \n\n"); while(!feof(fm)) //While Schleife solange Ende der Datei (feof) erreicht ist { fgets(zeile1, ZEILENLAENGE, fm); //zeilenweise einlesen if(strchr("!*#%\n",zeile1[0]) != NULL) //Zeile beginnt mit Kommentarmarke continue; //ermöglicht einen neuen Durchlauf in Zyklen ohne daß der aktuelle Durchlauf beendet werden muß resultat1 = sscanf(zeile1, "%lf %lf %c" , &weg[helper1], &lenkwinkel[helper1], &richtung[helper1]); //"Zahl" in String einlesen ++helper1; //erhöhen der Hilfsvariable "Buffer" //printf("\n weg innerhalb while = %lf", weg[helper1]); } fclose(fm); }
Jetzt läuft alles fehlerfrei allerdings liefer die 2. Komponente von jeweils weg[], lenkwinkel[] und richtung[] einen nicht plausiblen wert zurück, das wundert mich sehr, denn alle andren Komponenten funktionieren einwandfrei. Hab auch mittlerweile mal die txt Datei neu erstellt aber egal was in Zeile 3 steht die 2. KOmponenten der Vektoren passt nicht!
-
Hier das Manöverfile:
! Beispiel-Manöverfile
0 0 r ! Start
1 600 r ! Lenkrad
1 300 v ! Lenkrad
10 50 v ! mitEr bringt mir die falschen Werte (viel zu große ZAhlen bzw. komisches ZEichen für Richtung), in der 3. Komponente (sorry nicht wie oben beschrieben in der zweiten) d.h. in der 3. Zeile kann er nicht richtig einlesen. Das ist für mich sehr verwirrend, da der Fehler nur dort auftritt und auch dann noch besteht wenn ich die Zeile ändere bzw. die 4. Zeile vorziehe???