Int bereich - String eingabe
-
Hab ne for schleife geschriebenn
am anfang des programmes wird verlangt eine zahl einzugeben..
wenn man z.b. 5 eingibt, wird 5 mal hinterenander "hello world" geschrieben..jetzt will ich mein programm erweitern.. es soll eine fehlermeldung erscheinen wenn man am anfang statt zahl ein buchstabe eingibt..
(ich kann erst dos programme schreiben)
MfG
technology
-
void eingabe(const std::string & txt, double * var)
{
do
{
if (std::cin.fail())
{ //Fehlerstatus löschen
std::cin.clear();
//Eingabepuffer leeren
std::cin.ignore(std::numeric_limits<int>::max(), '\n');
}
//Eingabe-Aufforderung ausgeben
std::cout << txt;
//Variable einlesen
std::cin >> *var;
} while(std::cin.fail());
}
-
Wär schön gewesen, du hättest gesagt, wie du es machst/welche Funktion du verwendest.
Wenn du atoi oder atol verwendest musst du vorher selbst testen, da die beiden im Falle eines Buchstabens einfach 0 zurückliefern.
Das einfachste ist einfach zu testen, ob die Eingabe nur Ziffern enthält#include <ctype.h> /*...*/ string eingabe; for (int i = 0; i<eingabe.size()-1; i++){ // size()-1 um das Enter nicht zutesten if (!isdigit(eingabe[i])) // Fehler }Wenn die Schleife ohne Fehler durchläuft sind nur Zahlen im String.
-
[cpp]#include <iostream.h> int main() { int i; cout << "Geben sie eine Zahl ein.\n"; cin >> i; getchar(); for (int j = 0; j < i; j++) { cout << "Hello World\n"; } cout << "\nDrücke ENTER um das Programm zu beende\n"; getchar(); }[/cpp]das ist normalerweise mein code, was du mir da gegeben hast ist echt kompliziert..
-
das ist jetzt mein code..
[cpp]#include <iostream.h> #include <ctype.h> int main() { cout << "Bitte Zahl eingeben\n"; string eingabe; cin >> eingabe; getchar(); for (int i = 0; i < eingabe.size()-1; i++) { if (!isdigit(eingabe[1])) { cout << "Bitte ein Zahl eingeben\n"; getchar(); } else { cout << "\nFehler\n"; getchar(); }}}[/cpp]funktioniert aber nicht, könnt ihr mir weitere tipps geben?
-
Mein erster Tipp/Bitte, bitte verwende Code- oder besser noch C++-Tags um deinen Code zu posten, ist besser zum lesen.
2. Wenn du schon C++ machst, verwende auch C++-Header#include <iostream> // Der C++-Header #include <ctype.h> using namespace std; // Benötigt für string und cin/cout int main() { string eingabe; bool mis; // Soll zeigen, ob ein Fehler gamacht wurde bei der Eingabe do { //Beginn der endgeprüften Schleife mis = false; // Annahme Eingabe ist korrekt (kein Fehler, darum mis = false) cout << "Bitte Zahl eingeben\n"; cin >> eingabe; for (int i = 0; i < eingabe.size(); i++) //Koorektur von mir, Enter wird nicht im String gespeichert { if (!isdigit(eingabe[i])) { // hier war einer deiner Fehler, nicht eingabe[1], sondern eingabe[i] mis = true; // Es wurde ein Fehler gefunden break; //Abbruch der for-Schleife } } if (mis) cout << "\nFehler\n"; // Wenn ein Fehler austrat Meldung } while (mis); // Ende der endgeprüften Schleife }
-
imhotep schrieb:
Wenn du schon C++ machst, verwende auch C++-Header
Na dann aber auch bitte
#include <cctype>
-
imhotep vielen dank.. dein beitrag ist echt sehr übersichtlich..
eine frage, ich bin ganz neu in c++. und würde gerne wissen was C++-Header sind?
Hab dein Code compiliert, funktioniert, aber gibt keine nachricht aus, das programm wird gleich geschlossen..
nur wenn ich irgendeinen fehler mache (buchstabe eingebe)
steht dann dort FehlerBitte Zahl eingeben..
eine kleine hilfe bitte

MfG
technology
-
[quote="technology"]
#include <iostream.h> int main() { int i; cout << "Geben sie eine Zahl ein.\n"; cin >> i;Dazu muss man vielleicht wissen, dass die iostream's - in diesem Fall der std::istream in Gestalt von 'cin' - bereits intern eine Fehlerbehandlug durchführen. Wenn beim Einlesen ein Fehler aufgetreten ist, so wird stream-intern ein Fehlerflag gesetzt, welches man entweder mit fail() oder einfach mit
cin >> i; if( cin ) { // 'i' ist korrekt gelesenabfragen kann. Es ist also nicht (!) notwendig, genau genommen sogar ein Fehler, selber die Zeichen einzulesen und zu begutachten, ob eine Zahl vorliegt.
Dein Code könnte im Prinzip so aussehen:
#include <iostream> int main() { using namespace std; // cout, endl, usw. sind im namespace std definiert int i; cout << "Geben sie eine Zahl ein.\n"; cin >> i; if( cin ) { for (int j = 0; j < i; j++) { cout << "Hello World\n"; } } else cerr << "Die Eingabe war kein Zahl " << endl; cout << "\nDrücke ENTER um das Programm zu beende\n"; getchar(); return 0; }Bleibt noch zu erwähnen, dass man dieses stream-interne Fehlerflag mit clear() - also z.B.: cin.clear() - wieder löschen kann bzw. muss bevor eine weitere Eingabe möglich wird.
Gruß
Werner
-
Werner Salomon, danke jetzt verstehe ich es besser.
Vielen Dank.
MfG
technology
-
Werner Salomon
