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.
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.
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.
_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..
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
_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.
_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
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.
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..
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.
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...