Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Erklärung von Code

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
01.11.2004, 18:11 Uhr
~Gast
Gast


Hallo,

ich will mit einem Programm abfragen, ob es sich um Zahlen oder Buchstaben handelt.
Habe hier im Forum folgenden Code gefunden:


C++:
bool isNumber(char* zahl){
    char flag=0,*p=zahl;
    if(!*p) return false;
    if(*p=='-'||*p=='+')++p;
    for(;*p;++p)
        if(!isdigit(*p))
            if(flag || *p!='.' )return false;
            else ++flag;
    return true;
}



Da bei mir bool, false und true nicht funktioniert, habe ich für bool int geschrieben, für false = 0 und true = 1.

Da ich gerade erst mit C angefangen habe, verstehe ich den Code noch nicht so ganz. Könnte mir jemand den Code Schritt für Schritt erklären? Am besten mit Beispielen was der Code macht wenn ich eine Zahl oder etwas anderes eingebe.

Verstehe das auch mit den Zeigern noch nicht so ganz.

Danke für eure Hilfe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
01.11.2004, 20:17 Uhr
Pablo
Supertux
(Operator)


Wieso benutzt du isdigit() nicht? Funktionen dafür gibt es schon in der ANSI C Bibliothek
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
01.11.2004, 21:19 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


wieso funktioniert bei dir bool nicht? das ist doch ein standard-datentyp der immer gehen sollte?
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
01.11.2004, 22:10 Uhr
~Gast
Gast



Zitat von Pablo:
Wieso benutzt du isdigit() nicht? Funktionen dafür gibt es schon in der ANSI C Bibliothek


So wie ich das sehe wird in der Funktion doch isdigit benutzt oder nicht?



Zitat von FloSoft:
wieso funktioniert bei dir bool nicht? das ist doch ein standard-datentyp der immer gehen sollte?



Habe gelesen, dass bool erst ab ANSI 99 funktioniert. Ich programmiere mit Turbo C++ 3.0.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
01.11.2004, 22:52 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


ist bool nicht schon im C89 enthalten?
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
01.11.2004, 22:58 Uhr
~Gast
Gast



Zitat von FloSoft:
ist bool nicht schon im C89 enthalten?


Hmm weiß nicht, mir fehlt dann aber die stdbool.h.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
01.11.2004, 23:02 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


nimm einfach int und dann geht das vermutlich auch bei dir...
weiss auch nicht was mich da geritten hat ein bool zu nehmen...


C++:
int isNumber(char* zahl){
    char flag=0,*p=zahl;
    if(!*p) return 0;
    if(*p=='-'||*p=='+')++p;
    for(;*p;++p)
        if(!isdigit(*p))
            if(flag || *p!='.' )return 0;
            else ++flag;
    return 1;
}



strtod müsste eigentlich auch gehen und hat dann noch diesen potzenkram mit drin...
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 01.11.2004 um 23:04 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
01.11.2004, 23:37 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


ö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) return 0; //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!='.' )return 0; //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
    return 1; //wenn die schleife komplett durchläuft wars ne zahl 1 zurückliefern
}



--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
02.11.2004, 00:14 Uhr
0xdeadbeef
Gott
(Operator)


bool ist C++, C kennt es nicht.

Was die Funktion angeht, am einfachsten wärs wohl so:

C++:
#include <stdlib.h>

int is_number(char *s) {
  char *p;
  strtol(s, &p, 10);
  return *p == 0;
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
02.11.2004, 07:13 Uhr
virtual
Sexiest Bit alive
(Operator)


bool ist schon C, C99, aber ziemlich krank: Zunächst definiert die Sprache einen Typen "_Bool" zu dem es dann einen typedef typedef _Bool bool in stdbool.h gibt.


@Beefy: Warum habe ich immer den Eindruck, als würdest Du meinen, C99 sei nicht C? Ich glaub, er ist Dir zu neu, der C99, ist dem so?
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: