Frage zum Code (Parameterfehler??)



  • Hallo bin gerade in C eingestiegen und programmiere etwas herum. Übergebe meiner main methode 2 parameter und ein operationsszeichen. und es soll mir das ergebnis zurückliefern. Bei + und - klappt es wunderbar , wenn ich jedoch * oder / übergebe funktioniert es nicht! Durch debuggen konnte ich feststellen , dass wenn ich * oder / verwende in y 0.00000 gespeichert wird und somit das ergebnis falsch ist. mir ist es grad ein rätsel warum das bei + und - nicht der fall ist. danke für hilfe schonmal :))) hier der code :

    main(int argc , char *argv []){
    
    double x, y ,z ;
    #define TEST
    
    if(argc < 4){
    printf(" %s zahl1 op zahl2 ",argv[0]);
    exit(1);
    }
    
    x= atof(argv[1]);
    y = atof(argv[3]);
    
    #ifdef TEST
    fprintf(stderr,"\n x enthaelt %f",x);
    fprintf(stderr,"\n y enthaelt %f",y);
    #endif
    switch (argv[2][0]){
    
    case '+' :z= x+y ; break ;
    case  '-': z= x-y ; break ;
    case '*': z= x*y ; break ;
    case '/': z = x/y ; break ;
    default : printf("falsches operationszeichen !"); exit(1);
    
    }
    printf(" %s %s %s= %f",argv[1 ],argv[2],argv[3], z);
    exit(1);
    
    }
    


  • Auf welchem System machst du das?
    Du hast Leerzeichen zwischen den Paramtern?
    Und in Zeile 27 werden die Paramter auch richtig ausgegeben?



  • habe es unter windows mit codeblocks probiert , aber auch mit gcc in linux .

    ja leertaste ist dazwischen , es funktioniert ja richtig mit + und - .

    in zeile 12 zeigt mir der debugger an das in y der wert 0 gespeichert wird wenn ich * oder / verwende .



  • Das riecht nach Linux o.ä. Dort analysiert die Shell (Bash o.ä.) die Kommandozeile und ersetzt sie gegebenenfalls. Probier mal folgendes Programm:

    #include <stdio.h>
    
    int main( int argc, char *argv[])
    {
    	int i;
    	for (i=0; i<argc; ++i)
    	{
    		printf ("%i %s\n",i,argv[i]);
    	}
    
    	return 0;
    }
    

    Du wirst sehen, dass die Shell z.B. einen Stern (*) durch alle Dateien im Pfad ersetzt hat.

    Edit: Ich sehe, dass das mein MingW-gcc unter Windows auch macht. Der Slash (/) wird allerdings unverändert durchgereicht.

    viele grüße
    ralph



  • ich verstehe was du meinst.das ist wahrscheinlich der Fehler, wobei mir trotzdem unklar ist warum es unter windows in codeblocks auch falsch interpretiert wird. Und was kann ich tun wenn ich jetzt ein multiplikationsszeichen übergeben will und nicht den pfad?

    lg



  • desariel schrieb:

    Und was kann ich tun wenn ich jetzt ein multiplikationsszeichen übergeben will und nicht den pfad?

    Für Windows fällt mir jetzt nur ein, das per Hand zu erledigen:

    #include <stdio.h>
    #include <windows.h>
    
    void nalos ( LPWSTR* argv )
    {
        double x, y ,z ;
    
        x = wcstod(argv[1],0);
        y = wcstod(argv[3],0);
    
        switch (argv[2][0])
        {
            case '+' :z = x + y ; break ;
            case '-': z = x - y ; break ;
            case '*': z = x * y ; break ;
            case '/': z = x / y ; break ;
            default : printf("falsches operationszeichen !"); exit(1);
    
        }
        wprintf(L"Ergebnis: %s %s %s = %f",argv[1 ],argv[2],argv[3], z);
    }
    
    int main( void )
    {
        int i;
        int argc = 0;
        LPWSTR* argv = CommandLineToArgvW (GetCommandLineW(), &argc);
        for (i=0; i<argc; ++i) wprintf (L"%i %s\n",i,argv[i]);
        nalos (argv);
        GlobalFree (argv);
        return 0;
    }
    

    viele grüße
    ralph


Anmelden zum Antworten