String auf Zahlen überprüfen

Folcan

Grünschnabel
Hi,

ich hab das Problem, das ich beim einlesen des Strings diesen nicht auf Zahlen überprüfen kann. Bzw. die Schleife funktioniert einmal, beim zweiten durchlauf funktioniert sie aber nicht mehr. Egal was ich beim zweitenmal eingebe es kommt immer die Ausgabe:

cout <<"Bei Kommazahlen bitte Punkt als Kommaverwenden!\n\n\n";
cout <<"Bitte geben Sie die maximalen Punkte ein:" << endl;

Wo liegt denn da der fehler, oder geht das ganze auch einfacher?
Die Aufgabe sollte sein, das man nur Zahlen eingeben kann (auch Kommazahlen)
Schonmal Danke im voraus.


float TestInput()
{
char a,b;
float maxPointsOk;
string temp;
bool exitInput = false;

for(;;)
{
temp.erase(); //string "leeren"
b = ''; // char werte setzten!
a = ''; // char werte setzten!

cout <<"Bei Kommazahlen bitte Punkt als Kommaverwenden!\n\n\n";
cout <<"Bitte geben Sie die maximalen Punkte ein:" << endl;

b=cin.get();
while(a!='\n')
{
a=cin.get();
temp+=a;


if((a=='0')||(a=='1')||(a=='2')||(a=='3')||(a=='4')||(a=='5')||(a=='6')||(a=='7')||(a=='8')||(a=='9')
{

exitInput = true;
break;
}

else
{

system("cls");
cout << "Ihre Eingabe war leider Falsch!\n";
cout << "\nBitte wiederholen Sie Ihre eingabe!\n\n\n";
}
break;
}

}

temp = b+temp;

if(exitInput == true)
{
break;
}

}
stringstream Str;
Str << temp;
Str >> maxPointsOk;

return maxPointsOk;
}
 
Hallo,
benutze doch bitte beim nächsten Mal die [Code] -Tags.
Code:
float TestInput()
{
       char a,b;
       float maxPointsOk;
       string temp;
       bool exitInput = false;

       for(;;)
       {
               temp.erase();    //string "leeren"
               b = '';         // char werte setzten!
               a = '';         // char werte setzten!

               cout <<"Bei Kommazahlen bitte Punkt als Kommaverwenden!\n\n\n";
               cout <<"Bitte geben Sie die maximalen Punkte ein:" << endl;

               b=cin.get();
               while(a!='\n')
               {
                       a=cin.get();
                       temp+=a;

                       
                               if((a=='0')||(a=='1')||(a=='2')||(a=='3')||(a=='4')||(a=='5')||(a=='6')||(a=='7')||(a=='8')||(a=='9')
			       {

                                      exitInput = true;
                                      break;
			       }

                               else
			       {	

                                       system("cls");
                                       cout << "Ihre Eingabe war leider Falsch!\n";
                                       cout << "\nBitte wiederholen Sie Ihre eingabe!\n\n\n";
			       }
                               break;
                       }

               }

               temp = b+temp;

               if(exitInput == true)
               {
                       break;
               }

       }
       stringstream Str;
       Str << temp;
       Str >> maxPointsOk;

       return maxPointsOk;
}
Außerdem fällt mir so auf Anhieb auf:
- einem char kann nicht nichts zugewiesen werden: char a=''; dürfte nicht funktionieren
- eine fehlende runde Klammer am Ende des if ((a=='0')||...-Blocks
- eine schließende geschweifte Klammer ist zu viel

Gruß,
swalbking
 
Du könntest die eine eigene Funktion schreiben die überprüft ob Char-Var >= ASCII-Anfang-für-Zahl && Char-Var <= ASCII-Ende-für-Zahl...

Ich weiß nur leider nicht den Anfang und das Ende der Zahlen in der ASCII-Tabelle, aber so würd ich das am schnellsten lösen.

Gruß

//EDIT, braucht man ja gar nicht fällt mir gerade ein!! Ich hab diese Lösung zwar noch nicht ausprobiert, sollte aber funktionieren!
Code:
if( ( CHAR-VAR >= '0' ) && ( CHAR-VAR <= '9' ) )
{
}

VORSICHT, das funktioniert natürlich nur bei einer Char-Variable mit einem Zeichen!!

GRuß
 
Zuletzt bearbeitet:
Du könntest die eine eigene Funktion schreiben die überprüft ob Char-Var >= ASCII-Anfang-für-Zahl && Char-Var <= ASCII-Ende-für-Zahl...

Ich weiß nur leider nicht den Anfang und das Ende der Zahlen in der ASCII-Tabelle, aber so würd ich das am schnellsten lösen.

Gruß

//EDIT, braucht man ja gar nicht fällt mir gerade ein!! Ich hab diese Lösung zwar noch nicht ausprobiert, sollte aber funktionieren!
Code:
if( ( CHAR-VAR >= '0' ) && ( CHAR-VAR <= '9' ) )
{
}

VORSICHT, das funktioniert natürlich nur bei einer Char-Variable mit einem Zeichen!!

GRuß

Naja einen String direkt zu überprüfen geht wohl schlecht ;-).

Schau dir mal die Funktion isdigit, die in ctype.h deklariert wurde, an.
 
Ich hatte auch das Problem das ich den String nicht prüfen konnte ob es eine Zahl oder Buchstabe ist!

da gibt es die sehr elegante möglichlichkeit mit einer Methode zu prüfen:

Hier mal eine kleine Funktion die ich selber geschrieben habe, indem das mit dem isdigit vorkommt!

Code:
void KoordFilter(char *koordX, char *erg){
	char *ptrX=koordX;
	char *ptrXneu= erg;

	while(*ptrX){
			
		if( isdigit(*ptrX) || *ptrX == '.' ){ 
			//printf("\nIsdigit");
			//printf("%c", *ptrX);
			*ptrXneu++ = *ptrX;
			}
		*ptrX++;
		}
		*ptrXneu= '\0';

		//printf("\nAusgabe durch Funktion: %s" , erg);
}


Ich hoffe du kommst mit dem Beispiel zu recht!

Gruß + Viel Erfolg
 
Zurück