c++ abfrage, wenn die eingabe ein Buchstabe ist

6 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Mir fallen spontan 2 Möglichkeiten ein (je nach Anwendungsfall). Sind beide zwar nur C-Lösungen aber die gehen auch und bei Bedarf gibt es sicher auch eine C++ Lösung.

Wie liest du das Ergebnis ein? mit getch() oder mit cin?

Bei getch() (wenn du also nur ein einzelnes Zeichen einlesen willst) wäre die einfachste Lösung zu überprüfen ob der Wert zwischen '0' und '9' liegt. Also:

char x = getch();
int wert;
if  (x < '0' || x > '9') {
    // Fehler
}
else {
    wert = x-'0';
}

(keine Garantie für Syntaxfehler, es geht hier um die Idee)

Falls du einen kompletten string parsen willst nimm strtol(), sscanf() oder irgendwas was von der STL (adhoc keine Idee was es da gibt, aber da gibt es garantiert was) und überprüfe die Rückgabewerte.

Eingelesen wird das ganze mit dem cin Befehl.

0
@Pischi

Dann probier es mal mit folgendem:

std::string input;
int result, zahl;

std::cin>>input;
result = sscanf("%d", input.c_str(), &zahl);
if(result == 0 || result == EOF) {
    // Fehler
}
else {
    // in zahl steht das Ergebnis
}

Müsste in etwa so funktionieren. Habe grade keinen Compiler installiert, kann es also nicht ausprobieren (bin mir etwas unsicher ob 0 oder EOF gebraucht wird und ob EOF schon bekannt ist, wenn man die stdio.h eingebunden hat).

Ich glaube aber, dass es trotzdem Probleme gibt - wenn ich mich recht erinnere intereptiert cin Whitespaces (also u.a. Leerzeichen) als neue Zeilen (also wenn du z.B. "12 31 432 1" eingibst, bräuchtest du 4 cin hintereinander um jede einzelne Zahl einzulesen) Das ist zwar relativ einfach zu lösen, aber etwas komplizierter (und da müsste ich definitiv was mit dem Compiler probieren, weil ich da jetzt nicht 100%ig im Thema bin)

PS: ich seh gerade das GF meinen Code verschandelt...

>

soll hier '>' heißen.

0
@reddox86

Und plötzlich funktioniert es wieder...wtf...Ignorier mein PS xD

0
@reddox86

Ich habe den Code nochmal eingehämmert und getestet und mir ist ein grober Fehler aufgefallen...es muss heißen:

result = sscanf(input.c_str(), "%d", &zahl);

Aber dann wird auch etwas wie 123d gematched (als 123) was ja nicht besonders schick ist. Ein Workaround währe folgender Code:

std::string input;
int result, zahl;
char dmy;

std::cin>>input;
result = sscanf("%d%c", input.c_str(), &zahl, %dmy);
if(result != 1) {
    // Fehler
}
else {
    // in zahl steht das Ergebnis
}

Das funktioniert so, dass er versucht eine Zahl und ein Zeichen zu matchen. Wenn es ein Matchingergebnis ist, ist gut, dann haben wir nur eine Zahl. Findet er 2 (Zahl+irgendwas anderes hinten dran) oder 0 (fängt nicht mit einer Ziffer an) Ergebnisse gibt es einen Fehler. Das ist aber definitiv keine schöne Lösung (und ich bin sicher, dass es selbst mit sscanf() besser geht (ich würde so etwas in keinen meiner Codes stehen lassen, weil man später wahrscheinlich nicht mehr weiß was man damit bezweckt hat). Schöner wären aber Lösungen mit strtol(), oder noch schicker finde ich die Lösung von dergutekoenig, wenn du einen passenden Compiler zur Verfügung hast.

0

einfach mit isdigit prüfen:

int isdigit ( int c );

Visual Studio C++ eingabe und ausgabe eines Buchstaben

include

include

int main (void) { char B; int i;

printf("Geben Sie einen Buchstaben ein:"); scanf_s("%s",&B); printf("Der eingegebene Buchstabe war: %s\n",B); system("Pause"); return 0; }

Bei diesem Programm kann ich zwar einen Buchstaben eingeben,aber es wird mir keiner ausgegeben. Da steht dann der Buchstabe wäre (null). Was mach ich falsch, bei meinen Kommilitonen klappts mit genau dem selben Programm...

...zur Frage

In C überprüfen ob Scanf-Eingabe Natürliche Zahl ist?

Hallo,

mit welchem bzw. welchen Befehlen kann ich in C überprüfen ob meine Eingabe eine Natürlcihe Zahl ist und keine negative oder Buchstabe ist? Danke

...zur Frage

do while + try catch Abfrage in Java zur Eingabenkontrolle erzeugt unendlichen Loop

Also ich will in Java eine Methode schreiben die die Eingabe kontrolliert und dann bei korrekter Eingabe den eingegeben Wert zurückgibt. Mein Quellcode sieht so aus

public static int liesInt(String Ausgabe)
{       
    Scanner eingabe = new Scanner (System.in);
    int eingegeben = 0;
    System.out.println(Ausgabe);
    boolean error = true;
    
    do
    {
        try
        {
            eingegeben = eingabe.nextInt();
            error = false;
        }
        catch(InputMismatchException e)
        {
            System.out.println("Bitte geben Sie nur ganze Zahlen ein!");
            error = true;
        }   
    } while (error == true);
            
    return eingegeben;
}

mein problem ist dass er nach dem der catch greift und den error wert auf true gesetzt ist er nicht wieder zum try springt und nicht erneut nach einer eingabe fragt...

wo ist mein fehler eigentlich müsste er nach dem catch wieder oben anfangen beim try aber das passiert nicht

...zur Frage

Was möchtest Du wissen?