Buchstaben/Zahl erkennen



  • Hallo, ich habe vor kurezem mit CPP angefangen. Ich programmiere mit C Mikrocontroller.

    Eine (wahrscheinlich einfache) Frage:

    Ich möchte eine Zahl einlesen. Das Eingelesene soll dann überprüft werden ob es nun eine Zahl oder ein Buchstabe ist. Mit isalpha kann man die Buchstaben überprüfen. Aber welchen Datentyp muss ich für die Variable zum einlesen verwenden? Bei zahlen z.B. float und bei Buchstaben char...



  • 54m schrieb:

    Ich programmiere mit C ...

    Dann solltest du deine Frage auch im C und nicht im C++-SubForum stellen. 😉



  • War eigentlich nur ne Information.

    Hallo, ich habe vor kurezem mit CPP angefangen.

    Das Problem bezieht sich auf C++.



  • Ich möchte eine Zahl einlesen.

    Wenn du eine Zahl einlesen willst musst du natürlich dein float bzw. int/double verwenden.

    Wenn dann doch einer mal ein Bustaben eingeben sollte dann siehts übel aus 😃
    und dann --> http://www.c-plusplus.net/forum/viewtopic-var-t-is-118901.html (siehe FireFlow beitrag zur Lösung)

    Und wenn du halt sowas nicht machen willst mit dem Buffer leeren und so, dann benutze char und dann kannst es halt in eine Zahl umwandeln.
    Nur biste dann von 0-9 eingeschränkt, es sei denn du benutzt char[>1] (jenachdem) oder std::string 😉

    Du kannst ja dann prüfen ob im char ne Zahl ist wenn nicht einfach drauf reagieren.

    Am besten du sagst was du genau machen willst 😃



  • Mein Ziel ist ein kleiner Rechner. Zuerst gebe ich die Zahlen ein, dann wähle ich die Operatoren.

    Ein Problem tritt auf, wenn jemand statt einer Zahl ein Buchstabe eingibt. Ich möchte nun die Eingabe speichern (Variable) und überprüfen ob es sich um einen Buchstaben oder eine Zahl handelt. Wenn letzteres zutrifft, soll gerechnet werden. Sonst wird eine Fehlermeldung ausgegeben.



  • Da ich dich jetzt nicht mit cin's Kollgen den Fehlerbits und so belasten will,
    rate ich dir einfach ein char-Array oder noch besser std::string nehmen.

    Dann einfach wie gesagt prüfen ob es Zahlen oder bustaben sind und darauf reagieren.

    Nimm lieber das char-Array 😃 (jetzt werden wieder welche mit mir schimpfen 😞 )
    Denn dann lernst du das hantieren mit ihnen und jeder C++'er sollte es können 😉

    Dann wirds was wahrscheinlich was kniffeliger aber das sollte dich anspornen 😃 😃



  • Normalerweise würde ich boost::lexical_cast verwenden, aber da du Anfänger bist hast du boost wahrscheinlich noch nie gehört.

    Also wenn du zuerst in einen String, dann prüfen, dann Nummer wirds etwas schwieriger (ich rate davon am Anfang ab, geh einfach mal davon aus der Benutzer tippt eine Nummer ein, das reicht zum lernen)

    Ich mach es mal so dass es nen Anfäger versteht ohne std::string und sonstige STL Komponenten:

    #include <iostream>
    #include <cstdlib>
    
    using namespace std;
    
    int main() {
    
    	// Eingabe
    	char eingabe[10];
    	cin.getline(eingabe, 10);
    
    	// Überprüfung
    	for(int i=0; i<10 && eingabe[i] != 0; ++i) {
    		if(isdigit(eingabe[i]) == false) {
    			cout << "Das war keine Zahl du Troll!";
    			return 0;
    		}
    	}
    
    	// Umwandlung
    	int zahl = atoi(eingabe); // [a]rray [to] [i]nteger
    	cout << "Deine Zahl lautet " << zahl;
    
    	// Nicht vergessen:
    	return 0;
    
    }
    

    Die Funktionen isdigit und atoi sind eigentlich aus C, macht hier aber nix denn C++ Streams wäre ne Nummer zu groß fürn Anfang. Wenn du aber mal die STL verwendest solltest du nicht mehr auf Funktionen wie atoi zurück greifen.



  • Danke für die Hilfe. Ich werde das mal ausprobieren. 👍



  • FireFlow schrieb:

    int zahl = atoi(eingabe); // [a]rray [to] [i]nteger
    
    int zahl = atoi(eingabe); // [a]scii [to] [i]nteger
    

    👍 😃



  • Naja was solls... Sinn bleibt der gleiche. Ob ein Array aus ASCII oder ASCII 🙂



  • Das rutscht jetzt ziemlich in die reine C-Ecke. Wenn Du wirklich einen String als Pointer to char hast (char *), kannst Du die Konvertierung auch nachpruefen ueber deren Rueckgabewert:

    Aus den man-pages (entsprechen ANSI-C):

    These functions return the number of input items assigned,
    which can be fewer than provided for, or even zero, in the
    event of a matching failure. Zero indicates that, while
    there was input available, no conversions were assigned;
    typically this is due to an invalid input character, such
    as an alphabetic character for a ‘%d' conversion. The
    value EOF is returned if an input failure occurs before
    any conversion such as an end-of-file occurs. If an error
    or end-of-file occurs after conversion has begun, the num­
    ber of conversions which were successfully completed is
    returned.


Anmelden zum Antworten