Schleife / Multiplikation



  • #include <iostream>
    #include <string.h>
    #include <stdio.h>
    using namespace std;
    
    int operate (int a, int b)
    {
      return (a*b);
    }
    
    double operate (double a, double b)
    {
      return (a/b);
    }
    
    int main ()
    {
    
      int h;
    
      start:
      cout << "Möchtest du multiplizieren oder dividieren? Fuer multiplizieren drücke 1, für dividieren 2. Um das Programm zu beenden 0.";
      cin >> h; 
      int x,y;
      double n,m;
    
      while (h != 0)
      {
      	switch (h)
      	{
    
      case 1:
    
      cout << "Gib zwei Zahlen ein, die du multiplizieren möchtest:";
      cin >> x;
      cin >> y;
      cout << operate (x,y) << '\n';
      break;
      goto start;
    
      case 2:
    
      cout << "Gib zwei Zahlen ein, die du dividieren möchtest:";
      cin >> n;
      cin >> m;
      cout << operate (n,m) << '\n';
      break;
      goto start;
    
    }
    
    }
    
    }
    

    Hallo !

    Ich habe eine vermutlich sehr einfache Frage, komme aber selbst nicht auf die Lösung, und weiß auch nicht genau, nach was ich suchen soll.

    Ich taste mich gerade als blutiger Anfänger an c++ heran, und habe deswegen das kleine Programm geschrieben. Es funktioniert aber noch nicht so, wie es soll. Es soll nämlich, nachdem man per 1,2 oder 0 Eingabe sich entschieden hat zu Multiplizieren, Dividieren oder das Programm zu beenden, nach den Zahlen fragen und die Rechnung durchführen. Soweit funktioniert es. Aber dann soll es wieder auffordern, sich für eine der drei Optionen zu entscheiden. Das tut es aber nicht, sondern fragt immer weiter nach zahlen zum Multiplizieren (oder Dividieren, je nachdem, was man ausgewählt hat).
    Was ist der Fehler?



  • Hallo,

    deine goto (was hier eh nicht gerade der Königsweg ist) wird nie erreicht, weil es direkt nach dem break vom case... steht.



  • Hallo,

    der Königsweg muss ja auch nicht unbedingt sein, ich probiere mich nur aus.
    Allerdings kann das nicht der Grund sein, ich hatte nämlich schon, um das auszuprobieren, das "start:" einfach in die while schleife außerhalb des switch gesetzt mit einem cout direkt dahinter, und die Nachricht wurde mir dann auch angezeigt. dann gings aber weiter mit multiplizieren 😮



  • In diesem Fall bedeutet "nicht der Königsweg" -> Absolut verpöhnt. Niemals nie benutzen. Das ist ein Relikt aus der Steinzeit und gehört in keinen Code!

    Wenn du nach einem bestimmten Codeabschnitt wieder "oben" weitermachen willst... Schleifen scheinst du doch zu kennen 😉



  • Ymaoh schrieb:

    Allerdings kann das nicht der Grund sein, ich hatte nämlich schon, um das auszuprobieren, das "start:" einfach in die while schleife außerhalb des switch gesetzt mit einem cout direkt dahinter, und die Nachricht wurde mir dann auch angezeigt. dann gings aber weiter mit multiplizieren 😮

    Mmh!? Was ist das denn für eine Begründung?
    Du verlässt ja eben gerade nicht die while-Schleife. Das ist dein Problem.


Anmelden zum Antworten