Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Vektor an main übergeben

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
29.05.2006, 18:05 Uhr
~Theresa
Gast


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:


Code:
#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;
}
    
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
29.05.2006, 19:02 Uhr
xXx
Devil


hab mir deinen Code noch garnicht angeguckt... nur deinen Text gelesen... bis: Fehlermeldung ... als ich danach nicht die Meldung sah war mir sofort klar das dieser Thread auch direkt geschloßen werden kann
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
29.05.2006, 19:15 Uhr
~Theresa
Gast


Hallo,

es kamen verschiedene Fehlermeldungen und da ich momentan gerade daran "rumbastele" und es verschiedene Fehlermeldungen gibt wollte ich net alle posten.

aktueller Stand


C++:
double daten_einlesen(double*);

void main()
{
...
}


daten_einlesen(double *input[])//double* input[])
{
double resultat;
FILE*fi;
char datenfile[]= "Z:\\fahrzeugdatenfile.txt";
char zeile[ZEILENLAENGE];
//double 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 (input);
}
    


 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
29.05.2006, 19:26 Uhr
(un)wissender
Niveauwart


Deklaration und Definition passen nicht zusammen


C++:

double daten_einlesen(double *);


double daten_einlesen(double *input1[])
{
}
//muss heißen
double daten_einlesen(double *input1)
{
}
//merke
double *input1[] == double ** input1 != double * input1




Bearbeitung:

[Pablo]
Es muss int main heißen.
[/Pablo]


--
Wer früher stirbt ist länger tot.

Dieser Post wurde am 29.05.2006 um 19:28 Uhr von (un)wissender editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
29.05.2006, 21:13 Uhr
xXx
Devil


ka was du da machen willst Aber egal... mal was ich so rein von der logik her ändern würde:

C++:
void ReadData(double* pdInput);

int _tmain(int argc, _TCHAR* argv[])
{
    double dInput;
    ReadData(&dInput);
    
    return 0;
}

void ReadData(double* pdInput)
{
    double dResult;
    FILE*    pFile;
    char    cDataFile[] = "Z:\\fahrzeugdatenfile.txt";
    char    cLine[81];
    int        nHelper        = 0;

    pFile = fopen(cDataFile, "r");
    
    if(!pFile)
    {
        printf("\nNo input file found, please check datenfile!\n\n");
        return;
    }

    while(!feof(pFile))
    {
        fgets(cLine, 80, pFile);
        
        if(strchr("!*#%\n", cLine[0]) != NULL)
            continue;
        
        dResult = sscanf(cLine, "%lf", pdInput[nHelper]);

        ++nHelper;
    }

    fclose(pFile);
}
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
29.05.2006, 22:14 Uhr
~Theresa
Gast


Super vielen Dank, jetzt läufts....

ich hatte Probleme mit dem Funktionsheader von daten_einlesen der war bei mir falsch.

Zum Verständniss, ich lese mit der Fkt daten_einlesen Zahlen aus einer txt Datei ein, diese möchte ich gespeichert als Array in main übertragen und dort für Berechnungen weiterverwenden. Nochmal Dankeschön.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
29.05.2006, 22:45 Uhr
~theresa
Gast


So nach fleißigem Lesen bin ich soweit:



C++:
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!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
30.05.2006, 10:46 Uhr
ao

(Operator)


Kannst du das Manöver-File mal zeigen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
30.05.2006, 19:17 Uhr
~Theresa
Gast


Hier das Manöverfile:



Zitat:


! Beispiel-Manöverfile

0 0 r ! Start
1 600 r ! Lenkrad
1 300 v ! Lenkrad
10 50 v ! mit





Er 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???
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
30.05.2006, 19:46 Uhr
ao

(Operator)


Ist das das echte Manöverfile, was nicht funktioniert, oder nur eins, was so ähnlich ist?

Kann es sein, dass die zweite Zeile - die vor der fehlerhaften - sehr lang ist, länger als ZEILENLAENGE? Dann wird nämlich im dritten Schleifendurchlauf nicht die dritte Zeile gelesen und gescannt, sondern der Rest der zweiten, und von da an ist alles durcheinander.

Tipps für solche Fälle:

1. Debugger benutzen. Wenn du den Code schrittweise abarbeitest, merkst du solche Fehler sofort.

2. Wenn das nicht geht, Kontrollausgaben machen. Interessant wäre hier, vor dem Aufruf von sscanf den Inhalt von zeile1 zu sehen, und nach sscanf den Wert von resultat1 (erwartet wird 3, alles andere deutet auf Fehler hin).

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: