Zahlen von String trennen



  • dprzon schrieb:

    Jetzt hab ich verstanden was die Zeilen bedeuten. Ich meine mit der Eingabe, man muss ja das Ergebnis ausgeben lassen, also egal welche 2 Zahlen man eingibt.

    Weißt du, was der Unterschied zwischen EINgabe und AUSgabe ist?

    Wenn man das so wie es ist laufen lässt, wird nur der Fehler ausgegeben.

    Dann hast du es vermutlich falsch aufgerufen. Nachdem du das Programm compiliert hast, solltest du mal die Eingabeaufforderung öffnen, per cd C:\Programme\calcus in dein Projektverzeichnis wechseln und dort eingeben:

    calcus + 5.1 8.2
    

    Wenn es dann immer noch mit "Fehler - ..." antwortet, zeig mal bitte den kompletten Programmcode.



  • Bei mir heisst die *.exe Datei 2.3.exe.
    Die ist in dem Debugverzeichnis von dem Projekt (Programm).
    Wenn ich unter der Euingabeaufforderung da rein gehe und z.b. eingebe
    "2.3 + 5 5", dann wird die Fehlermeldung nur ausgegeben.

    Der Code ist ja so:

    #include <stdio.h>
    
    int main(int argc,char*argv[])
    {
      double val1,val2;
      char op;
    
      if(argc!=3)
      {
        printf("Fehler - bitte Parameter 'calcul + 5.1 6.2' angeben");
        return 1;
      }
    
      op=argv[1][0];
      val1=atof(argv[2]);
      val2=atof(argv[3]);
    
      printf("%f",val1+val2);
    
    }
    


  • Nur zu Kontrolle: Setz mal den folgenden Code for den if()-Block:

    int i;
    printf("Args: %d\n",argc);
    for(i=0;i<=argc;++i)
      printf("Arg%d: %s\n",i,argv[i]);
    

    (*grübelt* Es könnte auch sein, daß ich mich irgendwo verheddert habe)

    dprzon schrieb:

    Bei mir heisst die *.exe Datei 2.3.exe.

    Was für ein aussagekräfitger Name 😃 Wo hast du denn den her?



  • Hab den Code jetzt davor gesetzt und eingegeben "2.3 + 5 5".
    Dann kam:

    Args: 4
    Arg0: 2.3
    Arg1: +
    Arg2: 5
    Arg3: 5
    Arg4: <Null>
    Fehlermeldung...
    

    Gehen die Argumente eigentlich nicht von 0...2 (3 Argumente) und nicht 0...3 (4 Argumente) ?

    Auf den Namen 2.3 kam ich, weil das die Aufgabennummer ist, dass ich mit den Ordnern den Überblick behalte. Aber werd das mal trotzdem ändern, leider übernimmt Visual Studio die Programmnamen...



  • Sorry, dann war das wohl mein Fehler - ich hatte nicht bedacht, daß der Programmname auch mitgezählt wird (argv[0] ist der Programmname, argv[1] bis argv[argc-1] sind die Argumente, argv[argc] ist NULL). D.h. die Abfrage sollte if(argc!=4)... heißen.



  • Also ich hab im If Block statt die 3 die 4 genommen. Diesmal wird der Fehler natürlich nicht ausgegeben, aber dafür ein falsches Ergebnis andauernd 7093600.000000.

    Der Datentyp ist ja richtig...
    Im Programm muss man nichts ändern oder?



  • Gbi doch mal zusätzlich den Wert von val1 und val2 aus. (ich kann in deinem Code keinen Fehler entdecken - außer natürlich, du hast ihn per C&P verloren)



  • Für val1 und val2 gibt er jeweils 3546800.0000 aus.

    Bei der Umwandlung über atof kann eigentlich nur was schief gelaufen sein.

    op=argv[1][0];
      val1=atof(argv[2]);
      val2=atof(argv[3]);
    
      printf("%f",val1);
      printf("%f",val2);
    


  • Kann ich mir eigentlich nicht vorstellen, zumindest ist mir nicht bekannt, daß es solchen Müll produzieren sollte.

    (Hast du einen Debugger? Wenn ja, soll der sich mal das Programm ansehen)



  • Ah ich hatte vergessen stdlib einzubinden. Jetzt läuft es.
    Vielen vielen Dank dir nochmal für die Hilfe!!


Anmelden zum Antworten