Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 04:17

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

Advertisement



mehrere endbedingungen in whileschleife (c++)???

Discussion on mehrere endbedingungen in whileschleife (c++)??? within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
MrSimonKeks's Avatar
 
elite*gold: 0
Join Date: Nov 2009
Posts: 116
Received Thanks: 13
Question mehrere endbedingungen in whileschleife (c++)???

Mehrere Bedingungen zum Beenden der while Schleife (c++)

Hi, ich habe mal eine Frage...
Ich fange gerade an C++ zu lernen (Buch: Einführung in die Programmierung mit C++ von Bjarne Stroustrup) und jetzt soll ich folgende Aufgabe machen:
Schreiben Sie ein Programm, das aus einer while-Schleife besteht, die bei jedem Schleifendurchlauf zwei int-Werte einliest und diese dann ausgiebt. Verlassen sie das Programm wenn zum beenden ein '|' eingegenben wurde.
So das ist mein Code (while falsch ich weiß, das gehört zur Frage):
Code:
#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
#include<cmath>
using namespace std;
inline void keep_window_open() {char ch; cin>>ch;}
//----------------------------------------------------
int main()
{
    char end='|';
    int eingabe;
    int eingabe2;
    while(eingabe!=end; eingabe2!=end)
    {
        cout<<"Geben sie zwei Ganzzahlen ein:";
        cin>>eingabe;
        cin>>eingabe2;
        cout<<"Ihre Zahlen:"<<eingabe<<'\n';
    }
    return 0;
}
So meine Frage ist ob ich, wie bei while(eingabe!=end; eingabe2!=end) versucht habe, mehrere "Bedingungen" in die while-Schleife einfügen kann, so dass der Compiler dann aus der while-Schleife "herausgeht" und mit dem folgenden Code weitermacht.
So ich hoffe ihr könnt mir helfen und falls es nicht geht 2 "Bedingungen" in eine while-Schleife zu packen, dann würde ich mich auf andere Lösungswege mit while-Schleife freuen.
Mfg Simon

P.S Ich weiß diese Aufgabe ist trivial, aber ich komme einfach nicht drauf.
MrSimonKeks is offline  
Old 11/01/2010, 17:32   #2
 
elite*gold: 0
Join Date: May 2010
Posts: 793
Received Thanks: 268
benutze "||", den oder operator, er gibt true zurück wenn eines der element true ist
nkkk is offline  
Thanks
1 User
Old 11/01/2010, 17:45   #3
 
MrSimonKeks's Avatar
 
elite*gold: 0
Join Date: Nov 2009
Posts: 116
Received Thanks: 13
Ok, jetzt funktioniert das Programm zwar aber er beendet nicht das Programm wenn ich | eingebe. Sondern macht lässt es durchlaufen so, dass ganz oft hintereinander die Ganzzahlen ausgegeben werden.Entweder ich bin zu dumm oder ich bin zu dumm. (Fehlercode im compiler vllt. kann jemand damit was anfangen Process terminated with status -1073741510 (0 minutes, 14 seconds))
Sieht so aus:


MrSimonKeks is offline  
Old 11/01/2010, 18:41   #4
 
elite*gold: 0
Join Date: May 2010
Posts: 793
Received Thanks: 268
hmm liegt warscheinlich daran dass du ein int (32bit-ganzzahl(meistens))einliest, "|" ist unmal kein int also gibt dein cin sein bestes iegendas daraus zu interpretieren.
dann vergleichst du dein int mit dem char '|' was wenig sinn macht
nkkk is offline  
Old 11/01/2010, 19:21   #5
 
MrSimonKeks's Avatar
 
elite*gold: 0
Join Date: Nov 2009
Posts: 116
Received Thanks: 13
Jop, das war mir auch schon aufgefallen werde gleich mal etwas experimentieren^^.
Ich kann ja noch eine if-Anweisung reinschieben die abfragt ob das Programm beendet werden soll, aber das wäre dann nicht mehr die Aufgabe...
MrSimonKeks is offline  
Old 11/01/2010, 20:16   #6


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,905
Received Thanks: 25,397
Hier ist ein && gefragt und kein ||

Schließlich soll die Schleife beendet werden, wenn eine der Bedingungen nicht mehr zutrifft.

Quote:
dann vergleichst du dein int mit dem char '|' was wenig sinn macht
Entschuldige, aber was soll der Blödsinn?
Natürlich kann man int mit '|' vergleichen, nur nicht mit "|".
Für '|' wird der ASCII Wert eingesetzt, den man natürlich mit Int Werten vergleichen kann.
Das Problem ist, dass cin aus der Eingabe versucht, eine Zahl zu machen, was es bei '|' nicht tut, da es ja im String nach Zahlen sucht.

Das ließe sich folgendermaßen umgehen:

Code:
#include <string>
    string end="|";
    string eingabe;
    string eingabe2;
    while(eingabe!=end && eingabe2!=end)
    {
        cout<<"Geben sie zwei Ganzzahlen ein:";
        cin>>eingabe;
        cin>>eingabe2;
        cout<<"Ihre Zahlen:"<<eingabe<<'\n';
    }
MrSm!th is offline  
Thanks
1 User
Old 11/02/2010, 13:21   #7
 
MrSimonKeks's Avatar
 
elite*gold: 0
Join Date: Nov 2009
Posts: 116
Received Thanks: 13
Danke, das mit dem || und && hab ich auch bemerkt(bin noch mal das Buch durchgegangen und auf eine Liste mit den Operatoren gestoßen).Aber der Compiler erwartet jetzt immer noch ein zweites zeichen wenn ich | eingegeben habe.
Sprich:
--------------------------------------------------------

Geben sie zwei Ganzzahlen ein:| //zum beenden eingegeben
//es passiert nichts
a //gebe irgendeinen zweiten Wert ein
Die Zahlen: | a //gibt die beiden zahlen aus
Process returned 0 .... //gibt das erfolgreiche abschalten an´
Press any key to continue. // automatisch wird das geschrieben (code Blocks weiß nicht wie man abschaltet was an dieser Stelle jedoch irrelevant ist)

Dann drücke ich halt irgendeinen Knopf z.b. enter zum beenden und es geht aus...
Nunja wenn das nur das einzige Problem wäre....
Es gibt mehrere Aufgaben für ein Kapitel, die immer am Ende stehen.
Und Aufgabe 4 lautet wie folgt:
Ändern sie das Programm so, dass es double Werte statt int-Werte verwendet.
Nunja^^ Mit string wird das dann wohl auch nichts
Dummerweise sind keine Musterlösungen für die Aufgaben im Buch mit dabei...
(Wäre auch dumm, weil jeder irgendwann dann einmal da abspicken würde wenn er nicht weiter kommt und das ist ja nicht der Sinn der Sache , Ja ich weiß das ich gerade in einem Forum frage wie man die Aufgabe lösen könnte, aber ich habe mich auch schon länger mit der Aufgabe befasst)
Dummerweise muss man sich auf der Website von den Übersetzern des Buches (das Buch wird häufig für das Studium benutzt) anmelden. Und ich weiß auch garnicht oob man dann an Musterlösungen herankommt...Und auf der Homepage von Bjarne Stroustrup habe ich auch nichts gefunden.Deßhalb bitte ich erneut um Hilfe. Wie gesagt funtioniert das Beenden nun, aber erst nachdem man das zweite zeichen auch eingegeben hat.
Würde mich über Antworten freuen´und den Thx-Suchtis auch eines geben, wenn ihr post nützlich ist.
Mfg Simon.
Edit:
Hier der jetzige Code:
Code:
#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
#include<cmath>
using namespace std;
inline void keep_window_open() {char ch; cin>>ch;}
//----------------------------------------------------
int main()
{
    string ende="|";
    string eingabe;
    string eingabe2;
    while(eingabe!=ende && eingabe2!=ende)
    {
        cout<<"Geben sie eine Gleitkommazahlen ein:";
        cin>>eingabe;
        cin>>eingabe2;
        cout<<"Die Zahlen: "<<eingabe<<' '<<eingabe2;
    }
    return 0;
}
MrSimonKeks is offline  
Old 11/02/2010, 15:54   #8


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,905
Received Thanks: 25,397
Quote:
Mit string wird das dann wohl auch nichts
warum nicht? funktioniert genau so.

Quote:
Aber der Compiler erwartet jetzt immer noch ein zweites zeichen wenn ich | eingegeben habe.
Schon klar, weil du erst am Ende überprüfst, so hast du dein Programm doch geschrieben.
Egal was du eingibst, die Zahlen werden erstmal ausgegeben und dann wird überprüft, ob "|" drin war und falls ja, wird das Programm beendet.
Du musst die Logik überarbeiten, wenn es sofort abbrechen soll.
(btw. nicht der Compiler, sondern das Programm erwartet das)

Eine Idee wäre es, das mit continue zu lösen:

Code:
    string ende="|";
    string eingabe;
    string eingabe2;
    while(eingabe!=ende && eingabe2!=ende)
    {
        cout<<"Geben sie eine Gleitkommazahlen ein:";
        cin>>eingabe;
        if(eingabe == ende)
                continue;
        cin>>eingabe2;
        if(eingabe2 == ende)
                continue;
        cout<<"Die Zahlen: "<<eingabe<<' '<<eingabe2;
    }
    return 0;
Continue überspringt den gesamten Rumpf der Schleife und geht direkt zur Abbruchbedingung, die dann nicht mehr zutreffen würde.
MrSm!th is offline  
Old 11/02/2010, 16:18   #9
 
MrSimonKeks's Avatar
 
elite*gold: 0
Join Date: Nov 2009
Posts: 116
Received Thanks: 13
Hört sich gut an auch wenn ich das noch nicht hatte. Aber könnte man die while Schleife nicht auch so schreiben, dass er bei jedem ungültigen Zeichen abbricht???
Mein Vorschlag:
Code:
while(cin>>eingabe && cin>>eingabe2)
Wenn ich das einsetze wird ja solange die Schleife durchgehen, bis ich ein ungültiges Zeichen eingebe z.B. |. Dann könnte man ja auch folgendes schreiben:
Code:
double eingabe;
         double eingabe2;
Falls diese Idee volkommender Unsinn ist bitte schreiben.( Irgendwie funtionieren meine Compiler nicht, folgender Fehlercode kommt immer beim Compilieren:
undifined reference to `WinMain@16'
deßhalb bitte schreiben ob es funtionieren könnte.)
Mfg Simon
Edit: Mit dem continue Befehl kann man also vorzeitig aus der Schleife aussteigen? Wenn ja sehr hilfreich^^
Edit2: Fehler mit dem Compiler gefunden. Hatte keine main Funtion. Habe den Namen einfach geändert von der Funtion
MrSimonKeks is offline  
Old 11/02/2010, 22:58   #10


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,905
Received Thanks: 25,397
Sollte gehen ja.
Ich bin kein Fan von der Schreibweisen, Funktionen wie cin und cout in Bedingungen zu schreiben, mag aber daran liegen, dass ich die ganzen STL Templates zu unübersichtlich und verwirrend finde, kannst es ja mal ausprobieren.
MrSm!th is offline  
Old 11/04/2010, 20:54   #11
 
elite*gold: 0
Join Date: May 2010
Posts: 793
Received Thanks: 268
Quote:
Originally Posted by MrSm!th View Post
Entschuldige, aber was soll der Blödsinn?
Natürlich kann man int mit '|' vergleichen, nur nicht mit "|".
klar kann man, das hab ich auch nie bestritten, nur hier hat wenn man davon ausheht das der int der wert der grade eigelesenen zahl ist, ist macht es meiner meinug nach weing sinn.

PS: theoretisch ist "|" ein pointer also auch eine zahl man diese auch mit kann den also auch mit einem int vergleichen (wenn der compiler meckert schreibt man eben (int) davor).
nkkk is offline  
Old 11/04/2010, 21:36   #12


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,905
Received Thanks: 25,397
Irgendwie habe ich mir gedacht, dass das PS kommt ;O
Klar kann man das, aber im Gegensatz zum Vergleich von '|' mit einem Int Wert macht das wirklich 0 Sinn.
(Wenn man zb. Buchstaben in einer for Schleife abfragt, kann man die Zählervariable als Buchstaben interpretieren, wohingegen es wirklich keinen Sinn macht, einen Pointer auf nen String mit nem Int Wert zu vergleichen, es sei denn, man will gerade etwas über den RAM lernen und gibt sich deshalb ein paar Adressen testweise aus.)
MrSm!th is offline  
Reply


Similar Threads Similar Threads
[How To]Mehrere Shops in 1 NPC
08/07/2011 - Metin2 PServer Guides & Strategies - 36 Replies
Was ihr Benötigt : ---> FTP zugriff (des Servers) ---> MySQl zugriff (des Servers) so zuerst erstellt ihr die shops in mysql (dafür gibt es gunug tut´s. (ich zb erstelle mir 3 shops)) Meine shops haben die ID´s: --6181 <-- Potts un anderes zeug --6182 <-- Zeugs für Bonis
mehrere schops auf npc
10/29/2010 - Metin2 Private Server - 6 Replies
Ich wollte mir mehrere shopd auf nen npc machen hab die quest eingefügt quest shops begin state start begin when 9010.chat."Item-Shop" begin say_title("Waffi:") say("") say("Möchtest du den Unter30-Shop öffnen?") local s = select("Ja", "Nein") if s == 1 then
GK Bug mehrere CHs
04/25/2010 - Metin2 Private Server - 3 Replies
Hey, ich bin immer noch auf der Suche nach einer Lösung für das Problem mit GKs auf mehreren CHs. Weiß jemand, wie man das Problem löst?
Mehrere If's?
02/05/2010 - AutoIt - 2 Replies
Hallo, ich habe mal eine kleine Frage: Kann man in einem If - Then noch andere If - Then's einbauen? Z.B.: Also, wenn checkbox1 gecheckt ist, dann soll, wenn der pixel am punkt xx, xx die farbe 0xFFFFFF hat Space gedrückt werden. (Ist nur ein Beispiel)
Mehrere Characterere
11/07/2009 - S4 League - 7 Replies
Hey Wenn halbzeit ist kann man ja Char wechseln aber ich habe nur einen und weis nicht wie man noch einen erstellen kann könnt ihr mir bitte helfen?



All times are GMT +1. The time now is 04:17.


Powered by vBulletin®
Copyright ©2000 - 2025, 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 ©2025 elitepvpers All Rights Reserved.