Kontrolieren ob char eine Zahl ist



  • Hallo,
    wie schon oben im Titel beschrieben möchte ich kontrollieren ob eine Variable vom Typ char eine Zahl enthält, habe schon per google die Funktion "isdigit" gefunden, doch diese Funktioniert nur mit einem nervigen Fehler. Hoffe ihr versteht mein Problem.

    Mfg



  • Klar verstehen wir dein Problem. 🙂



  • Dann sollte die Antwort drauf, ja recht rasch kommmen 😉



  • Code?
    Fehlermeldung?



  • Sothsch schrieb:

    Dann sollte die Antwort drauf, ja recht rasch kommmen 😉

    korrigiere deinen Code.



  • Fehlendes Semikolon in Zeile 15.
    Und bitte nutz keine Ungarische Notation und globale Variablen.



  • while (!Map.eof())
        {
    		mapscannumber++;
            Map >> mapsign[mapscannumber];
    
    		if(mapsign[mapscannumber]) // Hier soll die Prüfung stattfinden
    		{
    
    			std::cout << mapsign[mapscannumber];
    
    		}
        }
    

    Und wenn ich isdigit benutze bekomme ich folgenden Fehler :

    Debug Assertion failed !
    Programm : Pfad ..
    File : Pfad ² ...

    Expression: (unsigned)(c+1)<= 256



  • Sothsch schrieb:

    while (!Map.eof())
        {
    		mapscannumber++;
            Map >> mapsign[mapscannumber];
    
    		if(mapsign[mapscannumber]) // Hier soll die Prüfung stattfinden
    		{
    
    			std::cout << mapsign[mapscannumber];
    
    		}
        }
    

    Und wenn ich isdigit benutze bekomme ich folgenden Fehler :

    Debug Assertion failed !
    Programm : Pfad ..
    File : Pfad ² ...

    Expression: (unsigned)(c+1)<= 256

    .. noch ein Opfer des while(!EOF)-Virus



  • von welchem Typ ist eigentlich mapsign ?



  • Vom Typ char


  • Mod

    Sothsch schrieb:

    Vom Typ char

    Also das muss schon sehr merkwürdig sein. mapscannumber ist dann ein Zeiger, oder wie?



  • Wenn mapscannumber ein arithemtischer Typ ist, kann das nicht sein.



  • Bei dieser Art von Frage könnt ihr davon ausgehen, dass der Typ char auch char-Array oder char-Zeiger bedeuten kann.

    An den OP: Ich meinte eigentlich den Code, der den Fehler produziert.



  • Bashar schrieb:

    An den OP: Ich meinte eigentlich den Code, der den Fehler produziert.

    Ich beginn trotzdem mal mit einer lustigen Ratestunde:
    Ich gehe davon aus, dass sich das assert in isdigit befindet.
    Das übergebene Argument ist also größer als 256.
    Wenn mapsign ein Array aus/Pointer auf char ist und mapsign[...] an isdigit übergeben wurde, gibt es nur zwei Gründe wieso das möglich ist:
    1. Ein char kann Werte größer als 256 aufnehmen, sie werden von istream auch so eingelesen. isdigit kommt aber damit nicht klar, also wäre die Implementierung unkonsistent, was ich bezweifle.
    2. Ein char ist signed, das Zeichen aus operator>> wird als negativer Wert konvertiert, der Cast beim Makro in unsigned führt zu einem Überlauf und das Assert schlägt an. Dann wäre aber erneut die Implementierung inkonsistent.
    Fazit: Du hast isdigit mit einem falschem Argument aufgerufen.


Log in to reply