Schleifen mit Buchstaben bzw. Wörtern abbrechen
-
Hallo erstmal. Habe im Internet nach einer Lösung für mein Problem gegooglet und kam dabei auf eure Seite, fand jedoch keine Lösung, darum wollte ich die Frage selbst einmal stellen.
Ich selbst bin noch C++ Anfänger, also bitte nicht zu kompliziert antworten
Also meine Frage ist folgende:
Hier erstmal ein Beispielprogramm
[quote]
#include <iostream>
using namespace std;int main()
{
double eingabe;
while (eingabe != 0)
{
cout << "Bitte Zahl eingeben: ";
cin >> eingabe;cout << "Die eingegebene Zahl lautet: " << eingabe << endl;
}return 0;
}
[quote]Ich möchte jetzt, dass der Benutzer das Programm nicht beendet, indem er eine 0 eingibt, sonder dass er ein Wort oder Zeichen eingeben muss wie zum Beispiel "Abbrechen". Wie ist das ganze einzubauen? Denn ich kann ja nicht sagen, dass die double eingabe ein Wort sein soll, damit das Programm beendet wird.
Kann mir Jemand helfen?
-
Das kannst du mit einem string machen.
#include <iostream> #include <string> // header für strings using namespace std; int main() { string eingabe; // string und nicht double while (eingabe != "Abbrechen") // vergleich { cout << "Bitte Wort eingeben: "; cin >> eingabe; cout << "Das eingegebene Wort lautet: " << eingabe << endl; } return 0; }
Ein string representiert einfach eine Zeichenkette und kann sehr intuitiv benutzt werden.
-
Versuch mal folgendes:
#include <iostream> #include <string> int main() { std::string eingabe; do { std::cout << "Einagbe: "; std::getline(std::cin, eingabe); } while (eingabe != "abbrechen"); return 0; }
Es wird zwischen Groß und Kleinschreibung unterschieden! Abbrechen ist nicht gleich abbrechen!
-
Erstmal danke für eure Antworten.
Leider hilft mir das nicht viel weiter. Denn ich programmiere gerade ein Programm, mit dem man Temperaturen umrechnen kann. Und natürlich kann ich da nicht 0 zum beenden nehmen, weil es ja auch 0 Grad Celsius und so gibt. Und wenn ich Einen String benutze, kann ich nicht mehr mit Zahlen rechnen, oder?
-
Doch. Dann musst du die aber konvertieren.
#include <iostream> #include <string> #include <sstream> // für stringstream // konvertiert einen string in ein double double string_to_double ( std::string s ) { double ret = 0; std::stringstream ss; ss << s; ss >> ret; return ret; } int main() { std::string eingabe; for(;;) { std::cout << "Einagbe: "; std::getline(std::cin, eingabe); if ( eingabe == "abbrechen" ) break; std::cout << "Die Zahl ist: " << string_to_double ( eingabe ) << std::endl; } }
Die Konvertierungsarbeit übernimmt da jetzt der
std::stringstream
für dich. Das muss du denke ich noch nicht umbedingt verstehen.
(der Vollständigkeitshalber sei hier noch boost::lexical_cast erwähnt, welche eher dafür geeignet ist, aber bei so einem einfachen Beispiel Overkill wäre ;))
-
#include <iostream>
#include <string> // header für strings
using namespace std;int main()
{
string auswahl = "w"; // string und nicht double
double eingabe;
while (auswahl != "a") // vergleich
{
cout << "Bitte Zahl eingeben: ";
cin >> eingabe;cout << "Die eingegebene Zahl lautet: " << eingabe << endl;
cout << "Wollen Sie abbrechen? " << endl;
cout << " <a> abbrechen" << endl;
cout << " <w> weitermachen" << endl;
cin >> auswahl;
}
return 0;
}Versuch es mal so.
-
Das kann man aber noch einfacher machen:
#include <iostream> #include <string> #include <cstdlib> using namespace std; int main() { string eingabe; while(true) { cout << "Bitte Zahl eingeben: "; cin >> eingabe; if(eingabe=="abbrechen")break; cout << "Die eingegebene Zahl lautet: " << atof(eingabe.c_str()) << endl; } return 0; }
Zur Erklärung:
Mit break kannst du eine Schleife vorzeitig verlassen.
Die Funktion atof kann eine Zahl aus einem String machen.
Da die Funktion atof einen c-String erwartet, wandelt man den string mit hilfe der Methode c_str() in einen solchen um.
atof ist in der headerdatei cstdlib deklariert.MfG, Jochen
-
Danke, ich werde morgen mal die verschiedenen Ansätze ausprobieren.