Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 06:23

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[Frage] int main Code erneut ausführen?

Discussion on [Frage] int main Code erneut ausführen? within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
Psycho Bär :D's Avatar
 
elite*gold: 12
Join Date: Jun 2008
Posts: 715
Received Thanks: 115
[Frage] int main Code erneut ausführen?

Hey Leute bin gerade am c++ lernen und hab mich als anfangs Aufgabe mal an einen Taschenrechner probiert, funktioniert auch eigentlich so wie er soll, jedoch hab ich das problem das er nur eine Aufgabe berechnet und denn beim erneuten "Enter" drücken beendet wird bzw wenn man versucht eine neue Aufgabe einzugeben wird nichts eingegeben.

Meine Frage ist nun wie bekomm ich das hin das der Code erneut anfängt, sodass man nach einander neue Aufgaben eingeben kann?

Code:
#include <iostream>

using namespace std;

int main(){
    
    
    
    double zahl1, zahl2, ergebnis;                // variablen für zahlen
    char rechenzeichen;                           // variable für das rechenzeichen

    cout << "Geben Sie eine Rechenaufgabe ein:\n"; 
    cin >> zahl1 >> rechenzeichen >> zahl2;       // Aufgabe einlesen

    switch(rechenzeichen){                        // wert ermitteln
        case '+': ergebnis = zahl1+zahl2; break;  // entsprechend des
        case '-': ergebnis = zahl1-zahl2; break;  // rechenzeichen
        case '*': ergebnis = zahl1*zahl2; break;  // das Ergebnis
        case '/': ergebnis = zahl1/zahl2; break;  // berechnen
        // Programmende falls falsches zeichen benutzt wird 
        default: cout << "ungueltige Eingabe...\n"; return 1;
    }

    // Aufgabe noch mal komplett ausgeben
    cout << zahl1 << ' ' << rechenzeichen << ' ' << zahl2 << " = " << ergebnis << '\n';
    
    
    
    cin.sync();
    cin.get();
    return 0;
}

Schon mal danke im vorraus

mfg Psychobär
Psycho Bär :D is offline  
Old 10/17/2013, 11:25   #2
 
Schlüsselbein's Avatar
 
elite*gold: 0
Join Date: Feb 2013
Posts: 1,137
Received Thanks: 869
Warten bis das Thema Schleifen kommt und dann umstrukturieren.
Selber die Einstiegsprozedur zu callen ruft undefinierten Verhalten auf.
Schlüsselbein is offline  
Old 10/17/2013, 11:36   #3
 
Psycho Bär :D's Avatar
 
elite*gold: 12
Join Date: Jun 2008
Posts: 715
Received Thanks: 115
Also so wie ich mich jetzt weiter gearbeitet habe müsste ich theoretisch den halben code neuschreiben und mit einen Menü anfangen in einer schleife
sprich
Auswählen was man rechnen möchte + - * /
Switch -> case zB mit 'a' 'A' für addition 's' 'S' für subtration usw
Aufgabe rechnen
Ergebnis ausgeben
Schleife wiederholen bis zB 'b' 'B' zum beenden gedrückt wird

also das man jedes mal auswählen muss was man rechnen will.


Korregiert mich falls es nicht der fall ist bin wie gesagt noch so ziemlich am anfang.

Also würde man mit meinen Code gar nicht weiter kommen, sodass der sich wiederholt und man immer neue Aufgaben untereinander ein tippen kann?
Psycho Bär :D is offline  
Old 10/17/2013, 11:51   #4
 
Schlüsselbein's Avatar
 
elite*gold: 0
Join Date: Feb 2013
Posts: 1,137
Received Thanks: 869
Doch, nur muss die Schleife einfach um das ganze Konstrukt.
Quote:
Schleife wiederholen bis zB 'b' 'B' zum beenden gedrückt wird
Korrekt.
Schlüsselbein is offline  
Thanks
1 User
Old 10/17/2013, 11:58   #5
 
Psycho Bär :D's Avatar
 
elite*gold: 12
Join Date: Jun 2008
Posts: 715
Received Thanks: 115
Ich denk schleifen sollte ich doch nochmal ein wenig mehr in angriff nehmen ist in mein Augen als Anfänger doch ein etwas komplexeres gebiet wie man sie richtig anwendet.
So wie ich versucht hatte die Schleife einzubauen hat am Ende nichts mehr geklappt und auf der Konsole wurde nur noch der _ angezeigt und nicht der eigentliche Text.

Danke für deine Antwort werde mich denn mal mit Schleifen beschäftigen und nochmal später posten obs geklappt hat oder wenn es noch harpert

mfg Psychobär

Sorry für Doppeltpost...

Habe das ganze jetzt in eine While-Schleife gehaun ist ja doch nicht ganz so kompliziert wie es am anfang schien
Naja soweit klappt auch alles zusätzlich noch wurzeln eingebaut jetzt hab ich nur noch das problem das er beim drücken von b oder B nicht beendet wird sondern zahl1 von letzten ergebnis 0 ist zahl2 von letzten ergebnis das gleiche und ergebnis ist gleich 0 = zahl2(aus dem letzten ergebnis) und diese aufgabe läuft denn in gefühlten millisekunden takt runter und das programm bleibt offen. Wie kann ich das "spammen" verhindern und den Code so schreiben das er beim drücken von b oder B beendet wird ohne das ein zusätzliches Enter erforderlich ist?

Bitte um mir das lernen zu vereinfachen keine Code lösungen schreiben sondern nur ein Tipp mit welcher funktion es möglich wäre.

mfg Psychobär
Psycho Bär :D is offline  
Old 10/17/2013, 18:00   #6


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
Wie sieht der neue Code aus?
MrSm!th is offline  
Old 10/18/2013, 10:55   #7
 
Psycho Bär :D's Avatar
 
elite*gold: 12
Join Date: Jun 2008
Posts: 715
Received Thanks: 115
Code:
#include <iostream>
#include <windows.h> // für beep
#include <math.h>   // für wurzel


using namespace std;

int main(){
    
    
    double zahl1, zahl2, ergebnis;                // variablen für Zahlen
    char rechenzeichen;                           // variable für das Rechenzeichen
    char Schleife;                                // variable für die schleife
    
     while (Schleife != 'b' || Schleife != 'B') {  // schleife zum wiederholen
        
        cout << "\nGeben Sie eine Rechenaufgabe ein:\n"; 
        cout << "Zahl + - / * w (wurzel) Zahl2 zum rechnen\n";
        cin >> zahl1 >> rechenzeichen >> zahl2;       // Aufgabe einlesen

    
    
    switch(rechenzeichen){                          // wert von rechenzeichen ermitteln
        case '+': {ergebnis = zahl1+zahl2; break;}  // entsprechend dem
        case '-': {ergebnis = zahl1-zahl2; break;}  // rechenzeichen
        case '*': {ergebnis = zahl1*zahl2; break;}  // das Ergebnis
        case '/': {ergebnis = zahl1/zahl2; break;}  // berechnen
        case 'w': {ergebnis = sqrt(zahl1); break;}  // wurzel berechnen
        case 'b': {return 0; break;}                // beenden klein b
        case 'B': {return 0; break;}                // beenden groß B
       // Programmende mit Piep-Ton falls ein falsches zeichen benutzt wird
        default: Beep (500, 500); return 0;

}  // switch 
   

    // gibt aufgabe + ergebnis aus
    cout << zahl1 << ' ' << rechenzeichen << ' ' << zahl2 << " = " << ergebnis << '\n';
    
    
    
    }  // while schleife
    
    
    
    cin.sync();
    cin.get();
    return 0;
}

Sorry ganz vergessen den neuen Code zu Posten :3
hoffe ihr könnt mir helfen :P

Edit: Wenn ich es ohne davor gerechnet zu haben versuche beendet er statt über 'b' / 'B' über das default mit Beep ton und wenn bereits gerechnet wurde läuft er wie gesagt 0 + die zahl2 von der alten aufgabe durch in millisekunden takt.

mfg Psychobär
Psycho Bär :D is offline  
Old 10/18/2013, 11:06   #8

 
snow's Avatar
 
elite*gold: 724
Join Date: Mar 2011
Posts: 10,480
Received Thanks: 3,319
Die Variable "Schleife" wird gar nicht genutzt. Du initialisierst sie nicht mit einem Wert, also wird das verwendet, was da im Speicher steht. Das kann in seltenen Fällen rein theoretisch zu einem 'b' oder 'B' führen und somit ist dein Programm direkt beendet.

Persönlich würde ich wohl eine do while Schleife verwenden mit der abschließenden Eingabe für "Schleife". So kannst du am Ende entscheiden, ob du noch einen Durchlauf willst.
snow is offline  
Old 10/19/2013, 15:56   #9
 
Tyrar's Avatar
 
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
Quote:
Originally Posted by Schlüsselbein View Post
Selber die Einstiegsprozedur zu callen ruft undefinierten Verhalten auf.
Würde irgendwann einen Stackoverflow verursachen.

Quote:
Originally Posted by Psycho Bär :D View Post
Code:
#include <iostream>
#include <windows.h> // für beep
#include <math.h>   // für wurzel


using namespace std;

int main(){
    
    
    double zahl1, zahl2, ergebnis;                // variablen für Zahlen
    char rechenzeichen;                           // variable für das Rechenzeichen
    char Schleife;                                // variable für die schleife
    
     while (Schleife != 'b' || Schleife != 'B') {  // schleife zum wiederholen
        
        cout << "\nGeben Sie eine Rechenaufgabe ein:\n"; 
        cout << "Zahl + - / * w (wurzel) Zahl2 zum rechnen\n";
        cin >> zahl1 >> rechenzeichen >> zahl2;       // Aufgabe einlesen

    
    
    switch(rechenzeichen){                          // wert von rechenzeichen ermitteln
        case '+': {ergebnis = zahl1+zahl2; break;}  // entsprechend dem
        case '-': {ergebnis = zahl1-zahl2; break;}  // rechenzeichen
        case '*': {ergebnis = zahl1*zahl2; break;}  // das Ergebnis
        case '/': {ergebnis = zahl1/zahl2; break;}  // berechnen
        case 'w': {ergebnis = sqrt(zahl1); break;}  // wurzel berechnen
        case 'b': {return 0; break;}                // beenden klein b
        case 'B': {return 0; break;}                // beenden groß B
       // Programmende mit Piep-Ton falls ein falsches zeichen benutzt wird
        default: Beep (500, 500); return 0;

}  // switch 
   

    // gibt aufgabe + ergebnis aus
    cout << zahl1 << ' ' << rechenzeichen << ' ' << zahl2 << " = " << ergebnis << '\n';
    
    
    
    }  // while schleife
    
    
    
    cin.sync();
    cin.get();
    return 0;
}

Sorry ganz vergessen den neuen Code zu Posten :3
hoffe ihr könnt mir helfen :P

Edit: Wenn ich es ohne davor gerechnet zu haben versuche beendet er statt über 'b' / 'B' über das default mit Beep ton und wenn bereits gerechnet wurde läuft er wie gesagt 0 + die zahl2 von der alten aufgabe durch in millisekunden takt.

mfg Psychobär
Was mir ziemlich übel ins Auge sticht ist folgende Zeile
Code:
using namespace std;
Warum wurde in dem Thread schon gut beschrieben.
Tyrar is offline  
Old 10/19/2013, 18:13   #10
 
elite*gold: 0
Join Date: Aug 2012
Posts: 236
Received Thanks: 94
Quote:
Originally Posted by HeavyHacker View Post
Würde irgendwann einen Stackoverflow verursachen.
Und noch viel schlimmer: es ist undefiniertes Verhalten.
Quote:
Originally Posted by §3.6.1.1
The function main shall not be used within a program. The linkage (3.5) of main is implementation-defined. A program that defines main as deleted or that declares main to be inline, static, or constexpr is illformed. The name main is not otherwise reserved.
Tasiro is offline  
Reply


Similar Threads Similar Threads
[Frage] League of Legends ohne erneut zu downloaden auf 2.PC installieren?
11/24/2012 - League of Legends - 8 Replies
Hallo EPVPlers, die Frage steht ja schon oben. Kann ich ohne neu zu downloaden iwie auf meinem zweiten Laptop LoL installieren? Nur kopieren geht nicht, da man es ja irgendwie noch installieren muss (lässt sich dann nicht ausführen). Hoffe auf helfende Antworten :)
Python Functions von Mt2 per C++ Code Inject ausführen?
12/02/2011 - C/C++ - 5 Replies
Hallo, wollte fragen, ob mir eventuell jemand beantworten kann, wie man Python Functions nützt, welche in den Metin2 - pack Files gespeichert sind. Und ob das überhaupt so wie ich mir das vorstelle möglich ist.
Erneut..[Frage wegen ItemShop]Eigene HP
07/28/2011 - Metin2 Private Server - 3 Replies
Servus wie die Überschrift schon sagt brauche ich hilfe bei dem Itemshop be meiner HP wen sich jemand aus kennt bitte hier schriebn bei erfolg 10€ psc...danke im vorraus
Code aus externer datei ausführen
05/20/2011 - General Coding - 8 Replies
Moin. Ich weiß gerade nicht wie ich ansetzen soll aber wäre es möglich eine DLL zu injecten mit nem "Ausführen" button, sodass die DLL nachdem man auf den Button klickt ASM code aus einer TXT datei ausführt. Wäre um einiges einfacher um die Funktionen zu reversen und verschiedene Pushs auszuprobieren. Ich weiß gerade nicht wirklich wie ich anfangen soll da ich nichtmal genau weiß ob es überhaupt möglich ist.
Frage zum Hack ausführen
08/30/2010 - WarRock - 4 Replies
hi alle, ich hab mir grad den noname hack runtergeladen (thx nochmal :)) Ich hab den gespeichert und jetzt wollt ich ihn starten. es ging weder bevor als auch dannach ich wr gestartet habe. Es kam immer die Meldung: o -Webdienst für Suche nach dem Richtigen Programm verwenden? o -Programm aus einer Liste installierter Programme auswählen? Ich habe es als rar Datei gespeichert.



All times are GMT +2. The time now is 06:23.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.