Überprüfen, ob Zahl oder anderes Zeichen eingegeben wurde...Wie?

moin


Hier meine Version als Funktion:
Code:
#include <iostream>

using namespace std;

bool isZahl(int temp)
{
	char zahl[10];
	itoa(temp, zahl, 10);

         for( int i=0; i<5; i++)
		if ( ! ((int)zahl[i] > 47 && (int)zahl[i] < 85))
			return false;
	
	return true;
}


int main()
{
	int xxx;
	cin>> xxx;

	bool ergebnis = isZahl(xxx);

	if( ergebnis == true )
		cout<<"Es ist eine Zahl";

	if(ergebnis == false)
		cout<<"Es ist keine \"reine\" Zahl";

	return 0;
}

Für deine ansprüche reicht das auf jedenfall, wenn man es variabler haben will sollte man die Parameterübergabe optimieren.


mfg
umbrasaxum
 
Wieso das Rad neu erfinden, wenn es schon mal gebaut wurde?

Code:
#include <iostream>

using namespace std;

int main(){

        int zahl = 0;
        char buf[20];
        cout << "Zahl?: ";
        cin >> buf;

        if(sscanf(buf, "%d", &zahl))
                cout << "Bingo " << zahl << "ist eine Zahl" << endl;
        else
                cout << "Ungültige Eingabe" << endl;
}

Gruß

RedWing
 
hallo umbrasaxum,

ich habe gerade mal deinen Code getestet. Es ist egal, ob man eine Zahl oder einen Buchstaben drückt. Es kommt immer die Meldung, dass es keine reine Zahl sei. Leider ist das Programm auch in cpp, ich schreibe in c.
Scheint ja irgendwie nicht so einfach zu sein, um eine Zahl von einem anderen Zeichen zu unterscheiden.
Ich probier mal weiter.

Allen ersteinmal ein herzliches Dankeschön.

Grüße
 
moin


Das ist merkwürdig da bei mir alles läuft! bin aber grad nciht zu Hause teste es nacher nochmal.

Und bis auf das cout, welches man durch printf ersetzen kann ist es reines C!


mfg
umbrasaxum
 
moin


Bin nun wieder zu Haus eund hab es nochmal getestet und es Funktioniert.

Hast du es 1:1 von mir übernommen oder irgendwas geändert?


mfg
umbrasaxum
 
cler hat gesagt.:
Scheint ja irgendwie nicht so einfach zu sein, um eine Zahl von einem anderen Zeichen zu unterscheiden.
Ich probier mal weiter.

RedWing hat gesagt.:
Wieso das Rad neu erfinden, wenn es schon mal gebaut wurde?

Code:
#include <iostream>

using namespace std;

int main(){

        int zahl = 0;
        char buf[20];
        cout << "Zahl?: ";
        cin >> buf;

        if(sscanf(buf, "%d", &zahl))
                cout << "Bingo " << zahl << "ist eine Zahl" << endl;
        else
                cout << "Ungültige Eingabe" << endl;
}

Gruß

RedWing
Augen auf beim Eierkauf...
 
Zuletzt bearbeitet:
sscanf funktioniert auch , wenn du mehr als nur eine Zahl eingegeben hast z.B. "1224 fdjfd".
Ist daher nicht geeignet.

Am besten ist alle eingegebenen Zeichen in einer Schleife zu prüfen.

@umbrasaxum
Nur so zur Info
Beim prüfen von Zeichen sollte man keine Zahlen verwenden, sondern lieber die characters dafür. Also '0' anstelle von 48. Das ist besser lesbar und weniger fehleranfällig.
 
moin


@dorado
Klar gibt es Funktionen wie z.B. isdigit() die machen aber auch nichts anderes als ich. Außerdem hatte ich darauf schon hingewiesen.

Zu deiner "Info":
Da bin ich anderer Meinung. Besonders bei so kleinen Funktionen sollte das schon in Ordnung gehen.


mfg
umbrasaxum
 
Hallo,

ich habe den folgenden code unter test.c gespeichert. Bekome dann immer den Fehler:

eh.h nur für c++.
Code:
#include <iostream>
using namespace std;

bool isZahl(int temp)
{
 char zahl[10];
 itoa(temp, zahl, 10);
         for( int i=0; i<5; i++)
  if ( ! ((int)zahl[i] > 47 && (int)zahl[i] < 85))
   return false;
 
 return true;
}

int main()
{
 int xxx;
 scanf(%i", &xxx);
 bool ergebnis = isZahl(xxx);
 if( ergebnis == true )
  printf("Es ist eine Zahl");
 if(ergebnis == false)
  printf("Es ist keine \"reine\" Zahl");
 return 0;
}
 
Zurück