Dringende Hilfe gesucht!!!



  • Hallo
    ich habe folgendes Programm geschrieben (mit Visual Studio 2008) um aus einer Textdatei Koordinaten einzulesen und diese umgerechnet in eine neue Textdatei zu schreiben:

    #include <stdio.h>
    #include <math.h>

    void Ka_Ku(float x,float y, float z,FILE*fOUT2)
    {
    float r,phi,theta;

    r=sqrt(x*x+y*y+z*z);
    phi=atan(y/x);
    theta=acos(z/r);

    fprintf(fOUT2,"%f %f %f \n",r,phi,theta);

    //Daten in Datei schreiben

    }

    int main (int argc, char * argv[]) // Hauptfunktion mit Kommandozeilenparameter
    {
    float xeing,yeing,zeing;
    float roheing,alphaeing,hoeheeing;
    float reing,phieing,thetaeing;
    int i=5;
    FILE * daten;
    FILE * fOUT;
    int line[100];

    if (argc<2)
    {printf("Falsche Eingabe");};

    if (strcmp(argv[1],"Daten.xyzk")!=0)
    {
    daten=fopen(argv[1],"r");
    fOUT=fopen("Umrechnung.ku","w");

    while (!feof(daten))
    {
    fgets(line,100,daten);
    sscanf(line,"%f,%f,%f",&xeing,&yeing,&zeing); //Daten einlesen und Variablen zuweisen

    Ka_Ku(xeing,yeing,zeing,fOUT);

    }
    fclose(daten);

    fprintf(fOUT,"Karthesisch in Kugelkoordinaten");

    fclose(fOUT);

    }

    ...

    In der Datei Daten.xyzk stehen die einzulesenden Daten.
    Wenn ich das Programm Debugge und vorher einstelle, dass die Datei Daten.xyzk als Befehlsargument übergeben wird, funktioniert das Programm.
    Wenn ich es jetzt aber richtig über cmd ausführen will krieg ich Fehlermeldungen.
    Kann mir irgendjemand helfen????



  • Lerne erstmal, den Code zu formatieren ...



  • und welche fehlermeldungen? also bitte, einfach nach hilfe schreien ohne sich die mühe zu machen etwas mehr an infos rauszurücken darf echt nicht unterstützt werden!!! 😡



  • Dringend hilfe gesucht? - doch nicht wirklich - ist doch nur c 😡

    Wie meine Vorschreiber schon anmerkten - sauberes Schreiben und Formatieren -
    da findet man Auffälligkeiten wesentlich einfacher 😃

    Hab da so einen Verdacht - nicht geprüft: Du verwendest die ( Leer- )Zeichen
    vor und nach dem "*" ziemlich willkürlich - oder willst du das so wie du
    das schreibst?



  • #include <stdio.h>
    #include <math.h>
    
    void Ka_Ku(float x,float y, float z,FILE*fOUT2)
    {
    float r,phi,theta;
    
    r=sqrt(x*x+y*y+z*z);phi=atan(y/x);
    theta=acos(z/r);
    
    fprintf(fOUT2,"%f %f %f \n",r,phi,theta);
    
    //Daten in Datei schreiben
    
    }
    
    int main (int argc, char * argv[]) // Hauptfunktion mit Kommandozeilenparameter
    {
    float xeing,yeing,zeing;
    float roheing,alphaeing,hoeheeing;
    float reing,phieing,thetaeing;
    int i=5;
    FILE * daten;
    FILE * fOUT;
    int line[100];
    
    if (argc<2)
    {
    printf("Falsche Eingabe");
    };
    
    if (strcmp(argv[1],"Daten.xyzk")!=0)
    {
    daten=fopen(argv[1],"r");
    fOUT=fopen("Umrechnung.ku","w");
    
    while (!feof(daten))
    {
    fgets(line,100,daten);
    sscanf(line,"%f,%f,%f",&xeing,&yeing,&zeing); //Daten einlesen und Variablen zuweisen
    
    Ka_Ku(xeing,yeing,zeing,fOUT);
    
    }
    fclose(daten);
    
    fprintf(fOUT,"Karthesisch in Kugelkoordinaten");
    
    fclose(fOUT);
    
    }
    


  • Ich glaube, es hat noch keiner so richtig kapiert, welches Problem du jetzt hast. Eventuell:

    fprintf(fOUT2,"%f %f %f \n",r,phi,theta);
    

    durch das hier austauschen:

    fscanf(fOUT2,"%f %f %f",&r,&phi,&theta);
    

    Was mir noch aufgefallen ist, ist das "...%f \n". Was soll das da? Wenn du glaubst, dass dadurch kein Zeielnumbruch folgt, haste dich geschnitten. Wenn du die Zeielnumbrüche nicht miteinlesen möchtest, solltest du dir einen kleinen Lexer schreiben.

    Mfg.
    way



  • Tut mir leid, es ist das erste mal, dass ich in nem Forum nach hilfe frage, ich bin maschinenbaustudent und habe leider nur laienfähigkeiten was programmieren betrifft.
    #include <stdio.h>
    #include <math.h>

    int main (int argc, char * argv[]) // Hauptfunktion mit Kommandozeilenparameter, die Textdatei, in der die Daten stehen wird hier übergeben.

    {
    float xeing,yeing,zeing;
    float roheing,alphaeing,hoeheeing;
    float reing,phieing,thetaeing;
    int i=5;
    FILE * daten;
    FILE * fOUT;
    int line[100];

    if (argc<2)
    {printf("Falsche Eingabe");};

    if (strcmp(argv[1],"Daten.xyzk")!=0) // hier wird verglichen, ob der Name der übergebenen Textdatei mit Daten.xyzk übereinstimmt, wenn ja dann wird die if funktion ausgeführt.

    {
    daten=fopen(argv[1],"r"); // öffnen der Datei um Daten einzulesen

    fOUT=fopen("Umrechnung.ku","w");// öffnen einer neuen Datei um umgerechnete Daten in diese zu schreiben

    while (!feof(daten))
    {
    fgets(line,100,daten); //zeilenweise die Daten aus der Datei einlesen

    sscanf(line,"%f,%f,%f",&xeing,&yeing,&zeing); //Daten aus dem tream einlesen und Variablen zuweisen

    Ka_Ku(xeing,yeing,zeing,fOUT); //Übergabe der Variablen an die Funktion

    }
    fclose(daten);

    fprintf(fOUT,"Karthesisch in Kugelkoordinaten");

    fclose(fOUT);

    }

    void Ka_Ku(float x,float y, float z,FILE*fOUT2)
    {
    float r,phi,theta;

    r=sqrt(x*x+y*y+z*z); //Umrechnen der Variablen
    phi=atan(y/x);
    theta=acos(z/r);

    fprintf(fOUT2,"%f %f %f \n",r,phi,theta);

    //Umgerechnete Variablen in die neu angelegte Textdatei Umrechnung.ku schreiben

    }

    Die Fehlermeldung lautet:
    File:f:\dd\vctools\crt_bld\self_x86\crt\src\feoferr.c
    Line:44

    Expression: (stream!=NULL)



  • He? Ich versteh nicht was so schwer daran ist die C/C++ TAGS ZU BENUTZEN!. Glaubste hier zählt jetzt einer Zeilen? Wird wohl irgendein Lesefeher mit fstream sein.



  • Hab den letzten Quelltext mal code::blocks-formatiert:
    Unter deinem Eingabefeld hier im Forum siehst du unter den Smilies
    einige Schaltfelder - nimm für C das mit c/c++ - und dann:

    #include <stdio.h>
    #include <math.h>
    
    int main (int argc, char * argv[]) // Hauptfunktion mit Kommandozeilenparameter, die Textdatei, in der die Daten stehen wird hier übergeben.
    
    {
        float xeing,yeing,zeing;
        float roheing,alphaeing,hoeheeing;
        float reing,phieing,thetaeing;
        int i=5;
        FILE * daten;
        FILE * fOUT;
        int line[100];
    
        if (argc<2)
        {
            printf("Falsche Eingabe");
        };
    
        if (strcmp(argv[1],"Daten.xyzk")!=0) // hier wird verglichen, ob der Name der übergebenen Textdatei mit Daten.xyzk übereinstimmt, wenn ja dann wird die if funktion ausgeführt.
    
        {
            daten=fopen(argv[1],"r"); // öffnen der Datei um Daten einzulesen
    
            fOUT=fopen("Umrechnung.ku","w");// öffnen einer neuen Datei um umgerechnete Daten in diese zu schreiben
    
            while (!feof(daten))
            {
                fgets(line,100,daten); //zeilenweise die Daten aus der Datei einlesen
    
                sscanf(line,"%f,%f,%f",&xeing,&yeing,&zeing); //Daten aus dem tream einlesen und Variablen zuweisen
    
                Ka_Ku(xeing,yeing,zeing,fOUT); //Übergabe der Variablen an die Funktion
    
            }
            fclose(daten);
    
            fprintf(fOUT,"Karthesisch in Kugelkoordinaten");
    
            fclose(fOUT);
    
        }
    
        void Ka_Ku(float x,float y, float z,FILE*fOUT2)
        {
            float r,phi,theta;
    
            r=sqrt(x*x+y*y+z*z); //Umrechnen der Variablen
            phi=atan(y/x);
            theta=acos(z/r);
    
            fprintf(fOUT2,"%f %f %f \n",r,phi,theta);
    
    //Umgerechnete Variablen in die neu angelegte Textdatei Umrechnung.ku schreiben
    
        }
    

    Und nach dem du deinen Quelltext hierhin kopiert hast nochmal auf c/c++

    Hab jetzt nicht den VC - aber, wenn du dir den formatierten Quelltext
    ansiehst - die Klammern sind nicht paarweise untereinander 😞

    Dann rufst du in main die Funktion Ka_Ku auf ohne die zuvor zu
    deklarieren 😞

    Weis jetzt nicht wie dein VC zur Fehlermeldung kommt - mein Compiler
    zeigt erstmal andere 😕

    So ausführlich da Weihnachten :xmas1:



  • .... gelöscht weil schrott...



  • Hau rein, da sind noch ein paar Macken in deinem Code.

    Bei der Abfrage ob der Dateiname richtig ist ( Zeile 31 ) ?

    Und noch mehr.
    Zeig mal ein wenig Einsatz 😉


Log in to reply