1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Deutsch
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Zahlen von String trennen

  • xxyy
  • 25. März 2007 um 13:05
  • Unerledigt
  • xxyy
    6
    xxyy
    Mitglied
    Punkte
    350
    Beiträge
    57
    • 25. März 2007 um 13:05
    • #1

    Hi Leute,

    ich muss ein kleines Programm schreiben das wie folgt funktionieren soll:

    Eingabe: calcul + 5.1 6.2

    Ich nehme mal an, dass er mir die beiden Zahlen addieren soll.
    Jedoch müssen diese ja in einer Zeile eingegeben werden, also String.

    Jetzt kenne ich die Funktion atof die mir jetzt die 5.1 "rausholen" kann. Aber wie mache ich das mit der 6.2 ?

    Bin mit Hilfe von jemanden darauf gekommen, dass man alles einzeln als string einlesen kann.

    Code
    #include <stdlib.h> 
     #include <stdio.h> 
    
     void main (void) 
     { 
       double zahl1,zahl2; 
       char *string1; 
       char *string2; 
       char *op; 
    
     scanf("%s",&op); 
     scanf("%s",&string1); 
     scanf("%s",&string2); 
    
    
    
       zahl1 = atof (string1); 
       zahl2 = atof (string2); 
       printf ("%f", zahl1+zahl2); 
    
     }
    Alles anzeigen

    Wenn ich das laufen lasse, dann gebe ich z.b. ein + 5 2.
    Und dann wird der Debuger wegen einer "unbehandelten Win32 Ausnahme" gestartet.

    Ich nehme an, dass ich etwas bei der scanf Adressierung falsch mache. Kann mir jemand helfen?

    Vielen Dank!

  • gelbasack
    25
    gelbasack
    Mitglied
    Reaktionen
    90
    Punkte
    6.525
    Beiträge
    1.241
    • 25. März 2007 um 13:44
    • #2

    Du liest mit scanf ein, hast aber gar keinen Speicher reserviert.
    Bei scanf schreibst du &string1, string1 ist aber ohnehin schon ein Pointer, da reicht's, wenn du string1 schreibst, das ist dann schon die Adresse.
    Außerdem ist's schöner strto* statt ato* zu verwenden.

    Edit: main() sollte Rückgabewert int haben.

  • MickeyM
    3
    MickeyM
    Mitglied
    Reaktionen
    4
    Punkte
    89
    Beiträge
    15
    • 25. März 2007 um 17:32
    • #3

    Hallo,

    also ich würd das inetwa so machen:

    Code
    float f1, f2;
    char operator;
     
    scanf("%[1]s %f %f", &operator, &f1, &f2);
     
    switch(operator)
    {
    case '+': printf("%f", f1+f2); break;
    case '-': printf("%f", f1-f2); break;
    case '*': printf("%f", f1*f2); break;
    case '/': printf("%f", f1/f2); break;
    default: printf("Leider falschen Operator eingegeben!");
    }
    Alles anzeigen



    hf

    RedFalcon

    EDIT: statt float kannst natürlich auch double verwenden...

    In theory there is no difference between theory and practice. In practice there is.

  • xxyy
    6
    xxyy
    Mitglied
    Punkte
    350
    Beiträge
    57
    • 25. März 2007 um 18:24
    • #4

    gelbasack

    Danke für den Hinweis. Wenn ich & weglasse bekomme ich die Fehlermeldung "op is used without being defined".

    MickeyM

    Ja das wäre natürlich die einfachste Lösung. Aber wir müssen das als Zeichenkette einlesen.

    Zitat


    Aufgabenstellung:
    Es sollen arithmetische Ausdrücke in den vier Grundrechenarten berechnet werden. Operator und Argumente werden als Kommandozeilenargumente angegeben.
    Zur Umwandlung einer Zeichenkette in einen double Wert kann die Funktion atof() verwendet werden.

  • xxyy
    6
    xxyy
    Mitglied
    Punkte
    350
    Beiträge
    57
    • 27. März 2007 um 00:03
    • #5

    Ich habe jetzt durch Tipps und das Tutorial Pronix das hier:


    Zitat


    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);

    return 0;
    }

    Alles anzeigen

    argc ist die Anzahl der übergebenen Parameter, argv[1] der Operator (z.b. +), argv[2] und argv[3] die beiden Operanden.

    Wenn ich das so laufen lasse, dann bekomme ich die die Fehlermeldung ausgegeben und fertig.
    Aber was muss ich machen/hinzufügen,dass ich das auch eingeben kann?
    Also z.b.: calcul + 2 3

  • MickeyM
    3
    MickeyM
    Mitglied
    Reaktionen
    4
    Punkte
    89
    Beiträge
    15
    • 27. März 2007 um 00:34
    • #6

    Da musst das Programm von der Konsole aus starten (unter Windows: Start->Ausführen: "cmd", unter Linux in der Shell, zB KDE: konsole oÄ).

    Dann in den Ordner wechseln, wo das fertig kompilierte Programm liegt, und dann einfach starten:

    Ohne parameter: "calcul"...
    Mit parameter: "calcul + 2 3" ...

    ...eingeben.

    In theory there is no difference between theory and practice. In practice there is.

  • xxyy
    6
    xxyy
    Mitglied
    Punkte
    350
    Beiträge
    57
    • 3. April 2007 um 01:03
    • #7

    Danke dir, habs dann mit paar Veränderungen hinbekommen.

  • Maximilian Rupp 27. Dezember 2024 um 12:05

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung

  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  • Deutsch
  • English
Zitat speichern