Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 12:27

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

Advertisement



Probleme mit if schleifen

Discussion on Probleme mit if schleifen within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
Hildeus's Avatar
 
elite*gold: 26
The Black Market: 110/1/0
Join Date: Apr 2011
Posts: 1,532
Received Thanks: 130
Probleme mit if schleifen

hey,
muss bei meinem Buch grad folgende aufgabe lösen:
Quote:
Schreiben Sie ein Programm, das den Benutzer auffordert, drei Integer-Werte einzugeben, und dann die Werte in numerischer Reihenfolge getrennt durch Komma ausgibt. Wenn der Benutzer die Werte 10 4 6 eingibt, sollte die ausgabe "4, 6, 10" lauten. Wenn zwei werte gleich sind, sollten sie zusammen stehen. Das heißt die eingabe 4 5 4 sollte "4, 4, 5" ergeben.
nun habe ich folgenden code:

Code:
int main()
{
	int n1;
	int n2;
	int n3;

	cout << "Geben sie 3 zahlen nacheinander ein: ";
	cin >> n1 >> n2 >> n3;

	if (n1<n2<n3)
		cout << n1 << ", " <<n2 << ", " << n3 << endl;

	if (n1<n3<n2)
		cout << n1 << ", " <<n3 << ", " << n2 << endl;

	if (n2<n1<n3)
		cout << n2 << ", " <<n1 << ", " << n3 << endl;

	if (n2<n3<n1)
		cout << n2 << ", " <<n3 << ", " << n1 << endl;

	if (n3<n1<n2)
		cout << n1 << ", " <<n2 << ", " << n3 << endl;

	if (n3<n2<n1)
		cout << n1 << ", " <<n2 << ", " << n3 << endl;
als Ausgabe kommt:




aber eigentlich sollte ja nur eine ausgabe kommen

lg
simon
Hildeus is offline  
Old 06/07/2012, 12:20   #2
 
.SkyneT.'s Avatar
 
elite*gold: 273
Join Date: Sep 2010
Posts: 1,831
Received Thanks: 786
Als aller erstes, es gibt keine If-Schleife !

Afaik musst du die Werte so vergleichen:
Code:
if (n1<n2 && n2<n3) // && ... Logisches Und
.SkyneT. is offline  
Thanks
1 User
Old 06/07/2012, 12:24   #3
 
elite*gold: 0
Join Date: Feb 2011
Posts: 248
Received Thanks: 45
Ich wollte dazu noch was sagen:


Oh sry hat Skynet ja schon gesagt...
21_0x15_025_NAK is offline  
Thanks
2 Users
Old 06/07/2012, 12:35   #4
 
xNopex's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
Code:
if (n1<n2<n3)
		cout << n1 << ", " <<n2 << ", " << n3 << endl;
Darum ist C++ so gemein. Der Compiler meckert nicht, weil das syntaktisch korrektes C++ ist:
Ausgewertet wird zuerst n1<n2. In deinem Fall also 6<4. Das ist falsch, also gibt dieser Ausdruck 0 zurück. Jetzt wird verglichen 0<n3, also 0<10. Das ist natürlich wahr, also gibt der gesamte Ausdruck 'wahr' und die Bedingung ist erfüllt.

Gute Compiler würden an dieser Stelle evtl. eine Warnung ausspucken. Vllt. hast du so eine erhalten?

Ansonsten wurde ja richtig beschrieben, wie du den Fehler behebst, nur so zum Verständnis.
xNopex is offline  
Thanks
1 User
Old 06/08/2012, 19:31   #5


 
Status's Avatar
 
elite*gold: 11
Join Date: Feb 2010
Posts: 8,312
Received Thanks: 4,589
Wenn ich mich nicht vertan habe, sollte so alles funktionieren. (Bei dem 4 und 6 Vergleich hattest du noch kleinere Fehler)

Code:
#include <iostream>
#include <conio.h> // Für _getch();

using namespace std;

int main()
{
	int n1;
	int n2;
	int n3;

	cout << "Geben sie Zahl 1 ein: ";
	cin >> n1;

	cout << "Geben sie Zahl 2 ein: ";
	cin >> n2;

	cout << "Geben sie Zahl 3 ein: ";
	cin >> n3;

	     if (n1<n2 && n2<n3)
		cout << n1 << ", " <<n2 << ", " << n3 << endl;

	else if (n1<n3 && n3<n2)
		cout << n1 << ", " <<n3 << ", " << n2 << endl;

	else if (n2<n1 && n1<n3)
		cout << n2 << ", " <<n1 << ", " << n3 << endl;

	else if (n3<n2 && n1<n2)
		cout << n3 << ", " <<n1 << ", " << n2 << endl;

	else if (n3<n1 && n1<n2)
		cout << n1 << ", " <<n2 << ", " << n3 << endl;

	else if (n3<n2 && n2<n1)
		cout << n3 << ", " <<n2 << ", " << n1 << endl;
	
	else if (n1==n2 && n2<n3)
		cout << n1<< "," <<n2<< "," <<n3<< endl;

	else if (n1==n2 && n2>n3)
		cout << n3<< "," <<n1<< "," <<n2<< endl;
	
	else if (n1==n3 && n2<n3 )
		cout << n1<< "," <<n3<< "," <<n2<< endl;

	else if (n1==n3 && n1>n3)
		cout << n1<< "," <<n3<< "," <<n2<< endl;

	else if (n2==n3 && n1>n3)
		cout << n2<< "," <<n3<< "," <<n1<< endl;

	else if (n2==n3 && n1<n3)
		cout << n1<< "," <<n2<< "," <<n3<< endl;


    
	_getch(); // wartet auf einen Tastendruck - Damit die Console sich nach der Arbeit nicht sofort schließt
	return 0;
}
Mit 'case' und float Werten könntest du das ganze nun noch modifizieren, damit Gleitkommazahlen unterstützt werden & du durch case die Möglichkeit hast, das Programm weiterlaufen zu lassen, nachdem der erste Vergleich getätigt wurde. Als Zusatz könntest du die Console sich auch selber 'säubern' lassen, damit die Übersichtlichkeit erhalten bleibt.
Status is offline  
Thanks
1 User
Old 06/08/2012, 19:34   #6
 
Hildeus's Avatar
 
elite*gold: 26
The Black Market: 110/1/0
Join Date: Apr 2011
Posts: 1,532
Received Thanks: 130
danke
eine frage noch: wiso benutzt du dauernd else if?

und in welcher header dateie ist _getch(); definiert?
Hildeus is offline  
Old 06/08/2012, 19:37   #7
 
xNopex's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
_getch() in der conio.h.. Aber bitte NICHT verwenden. Gewöhne dir das erst gar nicht an. Die conio.h ist von nichts und niemanden standard. Und du brauchst sie in den allermeisten Fällen auch nicht. Sie wird nichtmal von allen Compilern EINER Plattform unterstützt. Also vergiss sie schnell wieder..
xNopex is offline  
Thanks
1 User
Old 06/08/2012, 19:37   #8


 
Status's Avatar
 
elite*gold: 11
Join Date: Feb 2010
Posts: 8,312
Received Thanks: 4,589
Quote:
Originally Posted by ~[Dr.]FuD~ View Post
danke
eine frage noch: wiso benutzt du dauernd else if?

und in welcher header dateie ist _getch(); definiert?
Durch das else erhälst du nur eine Ausgabe (sonst, wenn: ) ist also eine Klammer nicht erfüllt, springt er zur nächsten. Deswegen erhälst du 6 Reihen - Pro Reihe eine Ausgabe, das wird durch das else verhindert.

Hab zum _getch was in dem Code geschrieben.

Quote:
Originally Posted by xNopex View Post
_getch() in der conio.h.. Aber bitte NICHT verwenden. Gewöhne dir das erst gar nicht an. Die conio.h ist von nichts und niemanden standard. Und du brauchst sie in den allermeisten Fällen auch nicht. Sie wird nichtmal von allen Compilern EINER Plattform unterstützt. Also vergiss sie schnell wieder..
Bei anfänglichen Consolen Programmen, welche in keiner Schleife sind und nicht durch eine spezielle Eingabe beendet werden, ist es durchaus hilfreich. Sobald er das nötige Wissen hat, wird er schnell selber feststellen, wie man es anders besser machen kann.
Status is offline  
Thanks
1 User
Old 06/08/2012, 19:42   #9
 
Hildeus's Avatar
 
elite*gold: 26
The Black Market: 110/1/0
Join Date: Apr 2011
Posts: 1,532
Received Thanks: 130
Quote:
Originally Posted by xNopex View Post
_getch() in der conio.h.. Aber bitte NICHT verwenden. Gewöhne dir das erst gar nicht an. Die conio.h ist von nichts und niemanden standard. Und du brauchst sie in den allermeisten Fällen auch nicht. Sie wird nichtmal von allen Compilern EINER Plattform unterstützt. Also vergiss sie schnell wieder..
könntest du mir dann bitte nur die definition für das _getch() geben?
dann mach ich nur diesen ausdruck in eine eigene .h

danke
Hildeus is offline  
Old 06/08/2012, 19:50   #10


 
Status's Avatar
 
elite*gold: 11
Join Date: Feb 2010
Posts: 8,312
Received Thanks: 4,589
Quote:
Originally Posted by ~[Dr.]FuD~ View Post
könntest du mir dann bitte nur die definition für das _getch() geben?
dann mach ich nur diesen ausdruck in eine eigene .h

danke
Wie nur die Definition von _getch?
Status is offline  
Old 06/08/2012, 19:54   #11
 
xNopex's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
Quote:
könntest du mir dann bitte nur die definition für das _getch() geben?
Die "Definition" ist...
a) von Plattform zu Plattform verschieden
b) mir auch nicht bekannt.
xNopex is offline  
Old 06/08/2012, 19:56   #12
 
Hildeus's Avatar
 
elite*gold: 26
The Black Market: 110/1/0
Join Date: Apr 2011
Posts: 1,532
Received Thanks: 130
Quote:
Originally Posted by °Status View Post
Wie nur die Definition von _getch?
ja, da ich den rest aus der .h nicht brauche. (im moment zumindest)
Hildeus is offline  
Old 06/08/2012, 20:16   #13
 
.SkyneT.'s Avatar
 
elite*gold: 273
Join Date: Sep 2010
Posts: 1,831
Received Thanks: 786
Quote:
Originally Posted by ~[Dr.]FuD~ View Post
ja, da ich den rest aus der .h nicht brauche. (im moment zumindest)
Willst du jetzt die conio.h zerlegen ?
Naja, ist der msdn Eintrag zu _getch.

Code:
	else if (n1==n2 && n2<n3)
		cout << n1<< "," <<n2<< "," <<n3<< endl;

	else if (n1==n2 && n2>n3)
		cout << n3<< "," <<n1<< "," <<n2<< endl;
	
	else if (n1==n3 && n2<n3 )
		cout << n1<< "," <<n3<< "," <<n2<< endl;

	else if (n1==n3 && n1>n3)
		cout << n1<< "," <<n3<< "," <<n2<< endl;

	else if (n2==n3 && n1>n3)
		cout << n2<< "," <<n3<< "," <<n1<< endl;

	else if (n2==n3 && n1<n3)
		cout << n1<< "," <<n2<< "," <<n3<< endl;
Statt dem könnte man diese Operatoren (schon bei den ersten
paar Abfragen) verwenden:
<= kleiner gleich
>= größer gleich


Die "bessere Lösung" wären dann Arrays, falls du dich damit
schon auseinandergesetzt hast.

Quote:
_getch() in der conio.h.. Aber bitte NICHT verwenden. Gewöhne dir das erst gar nicht an. Die conio.h ist von nichts und niemanden standard. Und du brauchst sie in den allermeisten Fällen auch nicht. Sie wird nichtmal von allen Compilern EINER Plattform unterstützt. Also vergiss sie schnell wieder..
Gibt es dafür auch gute Gründe ? (außer die Plattform(un)abhängigkeit)

Außerdem fällt mir auf die schnelle nicht einmal eine Alternative ein,
die genauso wie _getch funktioniert.
.SkyneT. is offline  
Thanks
1 User
Old 06/08/2012, 20:35   #14
 
xNopex's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
Es geht nicht um die Plattformunabhängigkeit, sondern darum, dass die conio.h kein Teil irgendeines Standards ist. Du kannst nichmal sicher sein, dass alle Compiler für Windows das unterstützen..
xNopex is offline  
Thanks
1 User
Old 06/08/2012, 21:16   #15


 
Status's Avatar
 
elite*gold: 11
Join Date: Feb 2010
Posts: 8,312
Received Thanks: 4,589
Quote:
Originally Posted by xNopex View Post
Es geht nicht um die Plattformunabhängigkeit, sondern darum, dass die conio.h kein Teil irgendeines Standards ist. Du kannst nichmal sicher sein, dass alle Compiler für Windows das unterstützen..
Wenn man zimperlich ist, sollte man auch 'std::' verwenden und 'using namespace std' weglassen.
Aber für die ersten Programme ist es ganz praktisch, wie '_getch();' finde ich.
Aber jeder hat seine eigene Weise zu programmieren, insofern macht es erst Sinn über sowas zu diskutieren, wenn durch eine falsche Entscheidung zu 100% Fehler entstehen, was, wie gesagt, hier nicht der Fall sein sollte.
Status is offline  
Reply


Similar Threads Similar Threads
While Schleifen parallel?
02/24/2012 - AutoIt - 9 Replies
nabend leute! ich beschäftige mich seit wenigen Stunden mit AutoIt hauptsächlich um mir erstmal selbst nen Bot zu basteln für Swtor. nun meine Frage zu diesem Script hier ist, wie schaff ich es das er nach der ersten While Schleife die 2te macht? bzw. die letzte sollte immer (falls "true") vor den 2 starten. hier das script: WinActive ("Star Wars: The Old Republic")
Messer schleifen
01/21/2012 - Off Topic - 2 Replies
Hab ein Taschenmesser mit einer Schwarzen klinge... die Klinge ist langsam Stumpf. Die Klinge ist etwa so : http://www.gagravarr.de/images/messer_vtech_titan x_1.jpg Ich will sie schleifen, aber als ich letztens eine Schwarze Klinge geschliffen hab war sie dann ca 1 cm nach oben Silber und das will ich nicht. Hat jemand eine Idee wie man die Klinge schleift? Mit der Hand ? Schleifstein halt?
While Schleifen Problem
12/31/2010 - AutoIt - 24 Replies
Hi Com., ich habe einen Fritzbox ip changer geschrieben. Alles klappt wunderbar, nur macht mir die while schleife zu schaffen. Hier mein Script. #include <INet.au3>
Probleme mit den Schleifen x.x
07/23/2010 - AutoIt - 18 Replies
Ja, hallo. :D Mein Problem ist das ich gerne einen Bot bauen würde der einnen Tastendruck ausführt wenn sich ein bestimmer Pixel auf dem Bildschirm verändert. Nur ist das Problem das AutoIt zu lahm ist da der Pixel sich schnell beweget und somit auch seine Farbe ändert und der Bot dann es nichtmehr schafft zuzuschlagen. :P Was ich nun versucht hab ist das man vll. sozusagen eine Tolleranz einbaut wie z.b. bei dem Pixelsearch Befehl nur ich hab ka. wie ich das anstellen soll. Ich...



All times are GMT +1. The time now is 12:28.


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