abfangen von buchstaben



  • okay... danke euch allen....



  • Es gibt auch noch die Möglichkeit (wenn du wirklich verhindern willst das in der Eingabe ein char vorkommt) mittels getch() die Eingaben abzufangen zu überprüfen und wenn es Zahlen sind diese dann in der Variable ab zu speichern.
    So kann der Benutzer nämlich keine Buchstaben Eingeben.



  • danke wolle... die funkton kannte ich noch nicht



  • Ja das darfst du jetzt nur nicht falsch verstehen, getch() wartet nur auf eine Eingabe und liefert diese dann zurück, ausserdem hast du keine Ausgabe am Bildschirm, so kannst du den Wert den getch() zurückliefert erst einmal überprüfen und dann gegebenenfalls am Bildschirm ausgeben und in einer Variable speichern.



  • Hi!

    Bedenke aber das getch() keine Standardfunktion ist und somit Implementierungsabhängig (wie conio.h selbst) ist. Was dich aber wohl nicht stören dürfte wenn das Programm nicht Plattformunabhängig sein soll.

    Code-Hacker



  • Hier habe ich dir noch einmal eine alte Funktion von mir herausgekramt, diese kann positive und negative ganzahlen einlesen:

    #include <iostream>
    #include <conio.h>
    
    using namespace std;
    
    const char  KEY_ENTER = 13,
    		KEY_BACKSPACE = 8;
    
    int onlyDigitsInput()
    {
    	int i = 0;
    	bool iPositive = true;
    	char c = '\0';
    	const char values[10] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
    	while((c = getch(), c != KEY_ENTER))
    	{
    		for(int j = 0; j < 10; j++)
    		{
    			if(c == values[j])
    			{
    				i *= 10;
    				i += j;
    				if(i) cout << j;
    				break;
    			}
    
    		}
    		if(c == KEY_BACKSPACE)
    		{
    			i /= 10;
    			cout << "\b \b";
    		}
    		else if(c == '-')
    		{
    			if(!i) cout << "-";
    			iPositive = false;
    		}
    		else if(c == '+')
    		{
    			if(!i)cout << "+";
    			iPositive = true;
    		}
    	}
    	if(!iPositive) i *= -1;
    	cout << endl;
    	return i;
    }
    

    Kannst ja mal den code compilieren und schauen ob es das ist was du brauchst.
    Gruß Wolle



  • [edit]Code-Hacker hat recht, ich vergesse immer zu erwähnen das es keine Standardfunktion ist, jedoch gibt es bei den meisten compilern eine getch() funktion oder etwas ähnliches.[/edit]



  • hab ich das jez richtig verstanden?
    wenn nicht, sry 4 post

    int main(void)
    {
    	int x;
    	x=getchar();
    
    	if(isdigit(x)) // auch if(x>= '0' && x<= '9') ist möglich
    	{
    		cout<<"true"<<endl;
    	}
    	else
    	{
    		cout<<"false"<<endl;
    	}
    }
    

    sowohl bei buchstaben, sonderzeichen oder negativen int-zahlen kriegt man ein false



  • Hih0,

    @fasti:
    ja, das ist jetzt ne ziemlich nette Variante, die Du da gefunden hast. Funktioniert im Moment so, weil char problemlos in int gecastet werden kann. Allerdings wirst Du, wenn Du weitercodest und die eingelesene Zahl dann benutzen willst, auf ein kleines Problem stossen. In x ist nämlich nicht die eingelesene Zahl gespeichert, sondern deren ASCII-Wert, musst du also noch ein wenig umrechnen. Aber vielleicht weisst Du das ja auch schon..



  • auch wenn man das zunächst übersehen hat (incl myself), sollte spätestens bei der ersten verwendung der "zahl" sofort klar sein woran es liegt und auch die lösung des "problems" sollte sich von selbst ergeben...

    x-'0';
     <...>
    

Anmelden zum Antworten