Überprüfen einer Integer-Eingabe .. ob Buchstaben darin vorkommen

GraKa

Semiprofi
Thread Starter
Mitglied seit
28.09.2008
Beiträge
2.712
Hi!

Wie kann ich denn bei einer Integer-Eingabe

cin >> iA;

:heuldoch:

überprüfen ob jemand einen Buchstaben eingegeben hat.. nachher würde ich gerne ein Fehlermeldung ausgeben und die Eingabe wiederholen.

Vielen Dank,

lg GraKa!
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
welche Sprache ? C++ .
Integer kann doch nur zahlen oder bin ich blöd ( nö eig net)
Buchstaben macht man mit character...
 
Hi!

Ja, C++ ... klar, aber wenn ich bei Integer einen Buchstaben eingebe kommt einfach irgendein Zahlenwert, den ich gar nicht haben will :)

gruß!
 
ueber einen Regulaeren Ausdruck koenntest du arbeiten. Andererseits sollte es in c++ doch isNumeric oder isInt Funktionen geben
 
Erstmal als char* einlesen und den dann durchgehen, ob alle Zeichen zwischen 0x30 und 0x39 liegen. Falls ja, atoi() ansonsten Fehler.

Fiele mir nun spontan ein. Aber ich hasse nun C++ wie die Pest, und kann nur sagen, wie ichs in C machen würd.
Ob C++ da was vorgefertigtes mitliefert: Keine Ahnung.
 
Zuletzt bearbeitet:
Okay danke, so probier ich das mal.

@asdfman: Warum hasst du C++?
 
Deine Urls gehen alle nicht :hmm:
 
Hmmm... Bei mir schon :(
google halt C++ FQA

€: Meine kurze Antwort wäre, dass C alles kann, was C++ kann, nur besser.
 
Zuletzt bearbeitet:
€: Meine kurze Antwort wäre, dass C alles kann, was C++ kann, nur besser.

Also dem muss ich widersprechen, ich bin jetzt kein Profi in dem Gebiet, aber C++ hat viele Sachen schon vereinfacht.

---------- Beitrag hinzugefügt um 00:48 ---------- Vorheriger Beitrag war Gestern um 23:43 ----------

Sodala, habs jetzt geschaffen, hier meine Lösung:

PHP:
    long lDezi;

    // EINGABE + ÜBERPRÜFUNG

    cout << "Geben Sie bitte die Dezimalzahl ein\n\n";

    string stest;

    getline(cin, stest);

    // ÜBERPRÜFUNG

   for (int iA = 0;iA < stest.size();iA++)
    {
        if ((stest[iA] < 48)||(stest[iA] > 57))
        {
            cout << "Falsche Eingabe, bitte erneut eingeben\n\n";

            getline(cin, stest);
            iA = -1;
        }
    }

    // ÜBERPRÜFUNG ENDE

    lDezi = atoi(stest.c_str()); // mit lDezi wird weitergerechnet

Wer sehen will was daraus geworden ist, ein Zahlensystemunwandler, sprich von Dualzahl zu Dezimalzahl .. Dezimalzahl zu Dualzahl.

Hier mal der komplette source:

PHP:
#include <iostream>
#include <string>

using namespace std;

void dual2dezimal();
void dezimal2dual();

int main()
{

char cWieder;
cWieder = 'J';

do
{

    // EINGABE UND ÜBERPRÜFUNG

    string sAbf;

    cout << "Geben Sie bitte eine Zahl ein:\n";
    cout << "1 --> Dual zu Dezimal\n";
    cout << "2 --> Dezimal zu Dual\n";
    cout << "3 --> Beenden\n\n";

    getline(cin, sAbf);

   for (int iA = 0;iA < sAbf.size();iA++)
    {
        if ((sAbf[iA] < 49)||(sAbf[iA] > 51))
        {
            cout << "Falsche Eingabe, bitte erneut eingeben\n\n";

            getline(cin, sAbf);
            iA = -1;
        }
    }

    int iAbf = atoi(sAbf.c_str());

    switch(iAbf)
    {
        case 1:
            fflush(stdin);
            cout << endl;
            dual2dezimal();
            break;
        case 2:
            fflush(stdin);
            cout << endl;
            dezimal2dual();
            break;
        case 3:
            return 0;
    }

    // EINGABE UND ÜBERPRÜFUNG ENDE

    cout << "Wollen Sie das Programm wiederholen?(J|N): ";
    cin >> cWieder; // Abfragen wiederholung?
    cout << endl;

}while ((cWieder == 'j')||(cWieder == 'J')); // Schleife-Wiederholung.

    return 0;
}


void dual2dezimal()
{
    string sdual;
    int iB, iMulti, iGes, iC, iHilfe, iA;

    cout << "Geben Sie bitte die Dualzahl ein:\n\n";
    getline (cin, sdual);



    iMulti = 1;
    iGes = 0;
    iA = 0;

    // EINGABE-ÜBERPRÜFUNG

    while (iA < sdual.size())
    {

        iC = (sdual[iA] - '0');

        iA = iA + 1;

        if ((iC < 0)||(iC > 1))
        {
            cout << endl << "Falsche Eingabe\n\n";

            cout << "Geben Sie bitte die Dualzahl ein:\n\n";
            getline (cin, sdual);
            iA = 0;
        }
    }

    // ENDE EINGABE-ÜBERPRÜFUNG

    // UMWANDLUNG

    for( int iA = 0;iA < sdual.size();iA++)
    {
        iB = (sdual[(sdual.size() - (iA + 1))] - '0') * iMulti;
        iMulti = iMulti * 2;
        iGes = iGes + iB;

    }

    // ENDE UMWANDLUNG

        cout << endl << "Ihre Dezimalzahl lautet: " << iGes << endl << endl;

}


void dezimal2dual()
{

    long lDezi;
    int iA, ix[99999], iy;

    // EINGABE + ÜBERPRÜFUNG

    cout << "Geben Sie bitte die Dezimalzahl ein\n\n";

    string stest;

    getline(cin, stest);

    // ÜBERPRÜFUNG

   for (int iA = 0;iA < stest.size();iA++)
    {
        if ((stest[iA] < 48)||(stest[iA] > 57))
        {
            cout << "Falsche Eingabe, bitte erneut eingeben\n\n";

            getline(cin, stest);
            iA = -1;
        }
    }

    // ÜBERPRÜFUNG ENDE

    lDezi = atoi(stest.c_str()); // mit lDezi wird weitergerechnet



    // EINGABE + ÜBERPRÜFUNG ENDE

    // UMRECHNUNG

    do
    {

        ix[iy]=lDezi%2;
        lDezi = lDezi / 2;
        iy=iy+1;

    }while(lDezi > 0);

    // UMRECHNUNG ENDE

    // AUSGABE IN UMGEKEHRTER REIHENFOLGE

    cout << "Ihre Dualzahl lautet: ";

    for(iA = 0;iA <= iy;iA++)
    {

        cout << ix[iy - iA];
    }

    cout << endl << endl;

    // AUSGABE IN UMGEKEHRTER REIHENFOLGE ENDE

}
 
Zuletzt bearbeitet:
Ich kann ja wie gesagt kein C++ richtig, aber wenn ich mir das so ansehe, sieht es aus,
als würde man für jedes einzelne Zeichen, das keine Ziffer ist, neu gefragt. Und die neuen
Eingaben werden dann nicht mehr geprüft. Kommt das so hin?

€: Wie wär sowas?

Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define LENGTH  128

int main(void) {
    char *input, c;
    int i, nochmal = 0;

    if((input = malloc(LENGTH)) == NULL) {
        fprintf(stderr, "malloc() failed.\n");
        return EXIT_FAILURE;
    }

    do {
        fgets(input, LENGTH, stdin);
        i = nochmal = 0;
        while(c = input[i++]) {
            if(((c < 0x30) || (c > 0x39)) && (c != 0x0a)) {
                fprintf(stderr, "Keine Zahl :(\n");
                nochmal = 1;
                break;
            }
        }
    } while (nochmal);
    printf("Eine Zahl :/\n");

    free(input);
    return EXIT_SUCCESS;
}

€2: Nochmal gelesen und gesehen, dass du den Zähler zurücksetzt.
Sollte zwar gehen, aber ist meiner bescheidenen Meinung nach sehr
hässlich. Wenn man mal kurz über den Code guckt, sieht das aus als
wird die Schleife jeweils nur einmal durchlaufen. Das verwirrt.

Mich zumindest :(
 
Zuletzt bearbeitet:
Die erneuten Eingaben werden auch überprüft .. ich setze ja bei der for-Schleife die Laufvariable nach einer erneuten Eingabe auf

iA = -1;

zurück.

gruß!
 
Ja, habs dann ja irgendwann noch gesehen. Aber mein Edit kam erst nachdem du geantwortet hast und ich hatte die Seite nicht refresht :/
Wie gesagt, find die Lösung nicht schön. Aber es sollte natürlich so gehen.
 
Zuletzt bearbeitet:
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh