C Kommandozeilenrechner



  • Wie rufst du das Programm denn auf?
    Dein argc wird != 4 sein.
    Dann kommt das printf und dann das return 0;, welches dein Programm beendet.

    Sonst gib doch mal argc mit aus:

    printf("Zuwenig Parameter (%d / 4). %s Wert1 Operator Wert2 (%d)", argc, argv[0]);
    


  • Es liegt definitiv an den Parametern.
    Ich benutze Cygwin und starte das Programm mit "./rechner 5 +5"
    Kann es daran liegen?
    Viele Grüße



  • meidi schrieb:

    "./rechner 5 +5"

    Das sind aber nur 3 Parameter:
    `argv[0] : ./rechner

    argv[1] : 5

    argv[2] : +5

    `

    Mit Leerzeichen zwischen allen Parametern sollte es klappen.



  • Das war ein Tippfehler.. Geht leider nach wie vor nicht, hmm

    gcc -c rechner.c -o rechner

    Stimmt doch auch oder? Da muss ich sicherlich irgendwas anderes doofes übersehen haben..



  • Also bei mir laeuft das Programm (Linux und OpenBSD).
    Kompiliert mit gcc.

    Komischerweise funktioniert Multiplikation nur, wenn ich
    auf der Kommandozeile '\' eingebe. Bei einfachem '' kommt
    nur die Fehlermeldung mit Abbruch.



  • gigg schrieb:

    Also bei mir laeuft das Programm (Linux und OpenBSD).
    Kompiliert mit gcc.

    Komischerweise funktioniert Multiplikation nur, wenn ich
    auf der Kommandozeile '\' eingebe. Bei einfachem '' kommt
    nur die Fehlermeldung mit Abbruch.

    Der * ist ja auch eine Wildcard/Joker: http://de.wikipedia.org/wiki/Wildcard_%28Informatik%29
    Bei Unix-Systemen wird die Wildcardexpansion von der Shell erledigt und nicht von den Programmen.

    Mach mal **ls *** und du weißt, was da eingefügt wird.



  • Ich werde es mal auf einem "richtigen" Unix-System testen, sollte klappen jetzt 😉

    Vielen Dank an alle die geholfen haben!



  • Siehe Kommentar bei printf...

    meidi schrieb:

    .
    .
    .
    switch(argv[2][0])
       {    case '+': add(zahl1,zahl2);
            break;
            case '-': sub(zahl1,zahl2);
            break;
            case '*': mult(zahl1,zahl2);
            break;
            case '/': divi(zahl1,zahl2);
            break;
            default: printf("Das hat nicht funktioniert! %f ung�ltig!\n",argv[2][0]); // ist %f wirklich das optimale Formatkennzeichen für argv[2][0]? (Rechenoperator...)
        }
    
    return 0;
    
    }
    

Anmelden zum Antworten