Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Überprüfung auf Buchstaben, Sonderzeichen & Nachkommastellen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
07.07.2003, 12:04 Uhr
~futzichen
Gast


Hallo, bin ein ziemlicher C++ Newbie und wir sollen eine Hausarbeit für dir Schule machen. Ich komme aber jetzt nicht mehr weiter...
Wie kann ich die Eingaben überprüfen, ob zB der Zinssatz keine 2 Kommas oder sogar sonserzeichen bzw Buchstaben hat?
Daselbige für alle anderen Eingaben... Kann mir da jmd helfen????
Bitte!!! hab das Programm komplett reinkopiert...

Schonmal vieeeelne Dank an den, der mir hilft!!!


C++:

int main() {
//Variablendeklaration
  float q, p;
  double Kapital;
  int n;
  char Antwort;
  bool Abbruch;
//Aufforderung zur Eingabe des Zinsatzes mit Überprüfung
//auf Gültigkeit des Eingabewertes
  do {
     cout << "\nBitte geben Sie den Zinssatz ein:\n";
     cin >> p;
     while (
     while (p <= 0.0 || p > 20.0) {
        cout << "\nFalsche Eingabe!" << endl;
        cout << endl;
        if (p <= 0.0) {
           cout << "\nEin Zinssatz kleiner 0.1 ist unzulaessig!\n" << endl;
           cout << endl;
           cout << "\nBitte geben Sie den Zinssatz ein:\n";
           cin >> p;
           }
        else {
           cout << "\nEin Zinssatz groesser 20.0 ist unzulaessig!\n" << endl;
           cout << endl;
           cout << "\nBitte geben Sie den Zinssatz ein:\n";
           cin >> p;
           }
        }
//Aufforderung zur Eingabe des Anfangskapitals mit Überprüfung
//auf Gültigkeit des Eingabewertes
     cout << endl;
     cout << "\nBitte geben Sie das Anfangskapital ein:\n";
     cin >> Kapital;
     while (1)
        if (Kapital > 0.0 && Kapital < 10000000.0)
           break;
        if (Kapital > 0.0) {
           cout << "\nFalsche Eingabe!" << endl;
           cout << endl;
           cout << "\nEin Anfangskapital kleiner 0.1 ist unzulaessig!\n" << endl;
           cout << endl;
           cout << "\nBitte geben Sie das Anfangskapital ein:\n";
           cin >> Kapital;
           }
        else {
           cout << "\nFalsche Eingabe!" << endl;
           cout << endl;
           cout << "\nEin Anfangskapital groesser 10000000.0 ist unzulaessig!\n" << endl;
           cout << endl;
           cout << "\nBitte geben Sie das Anfangskapital ein:\n";
           cin >> Kapital;
           }
//Aufforderung zur Eingabe der Laufzeit mit Überprüfung
//auf Gültigkeit des Eingabewertes
     cout << endl;
     cout << "Bitte geben Sie die Anzahl der Jahre ein:\n";
     Sprungziel:
     cin >> n;
     if (n <= 0) {  
        cout << "Falsche Eingabe!" << endl;
        cout << endl;
        cout << "\nDie Berechnung muss fuer mindestens ein Jahr erfolgen!\n" << endl;
        cout << endl;
        goto Sprungziel;
        }
//An dieser Stelle ist es am einfachsten 'goto' zu verwenden,
//auch wenn man Schleifen vorziehen sollte
     q = 1 + p/100;
     cout << endl;
     cout << "Zinsatz:        "<<p <<" Prozent" << endl;
     cout << "Anfangskapital: "<<Kapital <<" Euro" << endl;
     cout << "Laufzeit:       "<<n <<" Jahre" << endl;
     cout << "\nJahr    Endkapital" << endl;
     for (int i = 1; i <= n; i++) {
        Kapital *= q;
        cout << i << "\t" << Kapital << endl;
        }
//Abfrage ob das Programm beendet werden soll
     cout << "\nMoechten Sie das Programm beenden (j/n)? ";
     cin >> Antwort;
     switch (Antwort) {
        case 'j':
           Abbruch = true;
           break;
        case 'J':
           Abbruch = true;
           break;
        case 'n':
           Abbruch = false;
           break;
        case 'N':
           Abbruch = false;
           break;
        default:
           Abbruch = false;
           break;
        }
     }
  while (!Abbruch);
  return 0;
  getch();
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
07.07.2003, 12:54 Uhr
ao

(Operator)


Ich würde zuerst mal zuerst mal alle Eingaben schlucken und in einem String speichern. Den kannst du dann auseinandernehmen und versuchen, Zahlenwerte zu extrahieren. Das ist einfacher als die Keyboard-Eingaben direkt zu verwursten; was machst du bei ungültigen Zeichen?

Wie man das mit C++ macht, weiß ich nicht. Ich nehme dafür immer die C-Runtime-Lib-Funktionen fgets() zum Lesen der Zeichen (als Quellstream stdin angeben) und strtol() oder strtod() oder sscanf zum Umwandeln in Zahlenwerte; die erkennen auch ungültige Zeichen und es gibt keine Probleme mit Zeichen, die im Tastaturpuffer bleiben.

Oder gehört es zur Aufgabe, die Umwandlung in Zahlen selber zu programmieren?

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
07.07.2003, 13:05 Uhr
~futzichen
Gast


ÖHHHH, ich bin wie gesagt newbie... machen das erst seit einem halben jahr in der schule.... also den ersten abschnitt hab ich verstanden. bei fehler soll er meckern und eine neue eingabe verlangen...

ansonsten kenne ich mich glaube zu wenig aus um ihnen folgen zu können
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
07.07.2003, 14:49 Uhr
~0xdeadbeef
Gast


Hm. Ich würde wahrscheinlich direkt aus cin lesen, aber wenn du die Eingabezweile buffern willst, geht das so:

C++:
#include <iostream> //cin, cout etc.
#include <sstream> //stringstream
#include <string> //was wohl?

using namespace std; //einfacher zu lesen

int main() {
    string buffer;
    float zahl;
    stringstream ss;
    do {
        cout << "Zahl eingeben: " << flush;
        getline(cin, buffer); //Eine Zeile in den Buffer einlesen

        ss.clear();  //stream-flags auf normalzustand setzen. Wenn beim ersten Durchlauf
                    //ne falsche eingabe gemacht wurde, ist hier das fail-flag gesetzt,
                    //und damit wir aus der Schleife wieder rauskommen, müssen wirs unsetten.
        ss.str(buffer); //den Buffer in den Stringstream,
        ss >> zahl; //der dann für uns den String parst. Ggf. wird hier die eingegebene Zahl in
                    //die Variable zahl geschrieben.
    } while(ss.fail()); //Wenns schief ging, von vorne.

    cout << "Die eingegebene Zahl ist " << zahl << endl;

    return 0;
}


Übrigens kannst du ruhig du sagen. So förmlich ist der Umgangston hier nicht.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: