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 );

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

Excel Zahlenbereich Abfrage?

Wie kann man aus einem Feld, in der eine beliebige Zahl eingegeben werden kann, eine Abfrage starten, bei der für Zahlen in verschiedenen definierten Zahlenbereichen unterschiedliche Ergebnisse ausgegeben werden?

...zur Frage

C++ Programmierung Matrizen Frage zur Verständnis?

Guten Abend Leute,

ich habe eine Frage an euch, ich hoffe ihr könnt mir weiterhelfen.

Ich habe eine C++ Aufgabe, die ich versuche zu lösen und bin bezüglich auf dem richtigen Weg, wäre nicht die Aufgabenstellung, die zu verwirrend für mich ist und zwar folgendes:

a) Schreiben Sie eine main-Funktion, in der Sie eine 2x3 Matrix A mit folgenden Werten anlegen:

1 2 3

A = 1 2 3

b) Implementieren Sie nun die Methode PrintMatrix(), die die Elemente der Matrix in Zeilen und Spalten geordnet ausgibt. Einzelne Spalten sollen durch Leerzeichen getrennt werden, jede Zeile der Matrix soll in einer neuen Zeile in der Ausgabe beginne. Die Ausgabe für die Matrix A aus dem vorigen Aufgabenteil, soll wie folgt aussehen:

1 2 3

A = 1 2 3

Verwenden Sie in ihren Implementierungen die Methode GetEntry, um die Datenelemente auszugeben.

Meine Frage ist, ob ich mit der Funktion void PrintMatrix zuviel in einem Ruck gemacht habe? Ich soll ja noch die Methode GetEntry implementieren aber ich weiß nicht, wie ich das machen soll, ich bin bisschen ratlos. Vielen Dank!!

#include <iostream>

using namespace std;

void PrintMatrix()

{

int MatrixA [2][3] = {{1,2,3},{1,2,3}};

for (int i = 0; i<2; ++i)

{

for (int j = 0; j<3; ++j)

{

cout << MatrixA [i][j] << "\t";

}

cout << endl;

}

}

int main()

{

PrintMatrix();

return 0;

}

...zur Frage

Wie kann ich?: Eine Methode in JAVA nur einmal ausführen; Deren Wert fest speichern

Hallo,

ich bin Java-Anfänger und versuche gerade, zwei Funktionen (bspw Summe und Produkt mehrerer Werte) in einem Programm zu verpacken. Die main-Methode greift zuerst auf eine public static int[] Array zu, welche einen Auffordert, Zahlen einzugeben. anschließend muss man sich entscheiden, ob man die Summe oder das Produkt wissen möchte. Das läuft über public static int Summe bzw public static int Produkt. Nun fordert bich das Programm bei der Programmzeile, die Array[1] + Array[2] + ... realisiert (analog bei der Multiplikation) wieder zur Eingabe der Array-Werte auf, da ich diese mit int[] Array2 = Array(); abfrage.

Kann mit jemand helfen, wie ich die Werte aus Array so speichern kann, dass ich sie direkt abrufen kann (ohne erneute eingbe)??

Bin dankbar für Hilfe Nep

...zur Frage

C++ Timer der bei der Eingabe abbricht

Hallo, ich bin gerade dabei so ein kleines Quiz zu schreiben und wollte, dass man für jede Antwort nur 30 Sekunden Zeit hat. Jedoch weiß ich nicht, wie ich das schreiben soll, dass der Timer abbricht, sobald eine Eingabe getätigt und abgeschickt wurde. Wenn keine Eingabe getätigt wurde, soll eine Meldung erscheinen, dass jemand verloren hat.

MfG

...zur Frage

Variable zu Funktion Hinzufügen?

Hallo Community

Wie kann ich in C# einer Funktion eine Variable geben. Und ich meine keine Lokale neu Definition diser wie es bei Beispiel(int Test) der fall ist. Ich möchte einen bereits vorhandenen int in der variable nutzen sämtliche änderungen die an diesem dann im der variable gemacht werden sollen dannach auch auf die Variable übernommen werden. So das wenn ich danach außerhalb der variable sie benutze alle änderung welche vorher in der funktion gemacht wurden gemacht sind in CPP ging dies durch Beispiel(& Test) aber wie geht dies in C#?

...zur Frage

Was möchtest Du wissen?