Return Point

01/04/2013 15:32 wasgehtso#1
Also, ich bin ein ziemlicher Anfänger was C++ angeht und wollte deshalb fragen, wie man Punkt machen kann, zu denen man dann mit return zurück springt.
Also mein Beispielprojekt sieht jetzt einfach mal so aus:
int main () {
int c;
cout << "Abfrage:";
cin >> c;


if (c == 1) {
cout << "Krass";

}
if (c == 5) {
cout << "omfg";
c = 1;
return main ();
}

return 0;
}

Wenn ich dieses Programm benutze und zuerst 5 eingebe, dann soll er danach zu 1 springen, und ja ich weiß ich könnte den Quellcode von 1 einfach unten dran hängen, aber mir geht es hier ums Prinzip. :D
Ich brauche einen Punkt zwischen c >> c und if (c ==1) zu dem ich hinspringen kann, wenn ich ein Unterprogramm dafür öffne geht ja der Wert c verloren und wenn ich zu main springe fragt er mich halt wieder nach der Eingabe für c.

Vielen Dank für Eure Hilfe :)
01/04/2013 15:36 MrSm!th#2
Was du da vorhast ist ziemlich gefährlich und nicht wirklich sinnvoll. Was willst du denn genau erreichen?
Sprünge lassen sich mit goto realisieren, auch wenn es ein schlechter Stil ist und sinnlose, wirre Sprünge vermieden werden sollten, da sie das Programm unlesbarer machen.
01/04/2013 16:03 wasgehtso#3
und wie kann ich sagen wohin ich springen will, also in dem fall "goto ?"
01/04/2013 17:00 Nightblizard#4
Nope, gleich wieder vergessen. Was du hier vor hast ist ne ganz üble Geschichte, dafür nutzt man kein goto! Ich denke was du suchst sind eher Schleifen.

Code:
#include <iostream>

int main()
{
    const int validInput = 1; //magic numbers vermeiden
    int userInput = 0; //"c" ist ein absolut schlechter Variablenname
    
    do
    {
        std::cout << "Bitte geben sie eine Zahl ein: ";
        std::cin >> userInput;
    } while(userInput != validInput); //der Teil in den {} wird so lange wiederholt wie die eingegebene Zahl ungleich der validen Zahl (1) ist
    
    std::cout << "Sie haben '" << userInput << "' eingegeben!";
    return 0;
}
01/05/2013 12:04 TIMΣ™#5
Also an deiner Stelle würde ich den Stil von Nightblizards Code übernehmen, den das was du machen möchtest ist ziemlich blöd. Selbst goto ist eine schlechte Auswahl, dass kannste gerne in Batches verwenden ^^. Nunja, trotzdem ein Beispiel wie das mit goto funktionieren würde.

Code:
#include <iostream>

int main()
{

    int eingabe;

    SpringenMitGoto:; // Hier wird hingesprungen

    std::cout << "Bitte geben Sie eine Zahl ein: ";
    std::cin >> eingabe;
    std::cout << std::endl;

    if(eingabe == 3)
    {
        std::cout << "Treffer mit der Zahl " << eingabe << std::endl;
    }
    else if(eingabe == 5)
    {
        std::cout << "Du darfst es noch einmal versuchen" << std::endl;
        goto SpringenMitGoto; // Hier sagst du ihm, dass er dahin springen soll, wo SpringenMitGoto definiert wurde
    }
    else
    {
        std::cout << "Du hast keinen Treffer gelandet" << std::endl;
    }

    return 0;

}
01/05/2013 12:51 wasgehtso#6
Quote:
Originally Posted by Nightblizard View Post
Nope, gleich wieder vergessen. Was du hier vor hast ist ne ganz üble Geschichte, dafür nutzt man kein goto! Ich denke was du suchst sind eher Schleifen.

Code:
#include <iostream>

int main()
{
    const int validInput = 1; //magic numbers vermeiden
    int userInput = 0; //"c" ist ein absolut schlechter Variablenname
    
    do
    {
        std::cout << "Bitte geben sie eine Zahl ein: ";
        std::cin >> userInput;
    } while(userInput != validInput); //der Teil in den {} wird so lange wiederholt wie die eingegebene Zahl ungleich der validen Zahl (1) ist
    
    std::cout << "Sie haben '" << userInput << "' eingegeben!";
    return 0;
}
Vielen Dank :) ich brauchte das für nur eine Situation und das Projekt war halt nur ein Beispiel, aber danke für die Antwort :) du hast fragen beantwortet die ich noch garnicht gestellt habe :D aber das mit dem while ist ne ganz gute idee, hab ich garnicht dran gedacht :D manchmal steh ich halt echt neben der spur :D