bool gibts in C99? Das war mir bisher nicht bekannt...
Nein, ich hab nichts gegen C99 - auch wenn ich eher in C++ verankert bin. Es ist nur so, dass C89 einem beim Golfen größere Freiheiten lässt. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra
öhm ich hab mal wieder nicht richtig gelesen... du wolltest ja eine erklärung haben
C++:
int isNumber(char* zahl){ char flag=0,*p=zahl;//zeiger p auf stringanfang zeigen lassen, flag merkt sich ob schon ein punkt registriert wurde.... if(!*p) return0; //wenn der string leer ist keine zahl if(*p=='-'||*p=='+')++p; //eventuelles + oder minus weglesen for(;*p;++p) //so lange p noch nicht auf den ende des strings zeigt lasse am p aufs nächste zeichen zeigen if(!isdigit(*p)) //wenn p nicht auf eine ziffer (0...9) zeigt... if(flag || *p!='.' )return0; //wenn schon ein punkt gefunden wurde oder p nicht auf einen punkt zeigt ist es keine zahl else ++flag; //an sonsten muss es ein punkt sein also merken das schon einer gefunden wurd indem flag um eins erhöht wird return1; //wenn die schleife komplett durchläuft wars ne zahl 1 zurückliefern }
Ok habe das jetzt so einigermassen verstanden. Anstelle von return 1 könnte ich doch dann auch direkt die Zahl zurückgeben oder? In dieser Funktion ist die Zahl ja soweit ich weiß noch ein string, dann müßte ich mit atoi ? den string in eine Zahl umwandeln?
Habe es mal so versucht:
return atoi(zahl);
und dann in der main funktion:
if (isNumber(zahl)) { printf("%d",zahl); }
da bekomme ich dann aber nicht die eingegebene Zahl raus.
if(isNumber(zahl)) //Prüft, ob isNumber keine 0 zurück gibt { int echte_zahl = isNumber(zahl); //Der return-wert wirt in eine integer-variable gespeichert }
Was evtl Probleme machen könnte (wird) ist, wenn jemand die Zahl "0" eingibt. da müsste man dan noch irgendwie was machen. -- MFG RedEagle