JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=390a2b79c00dad7942c49b83696c86a6Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Zahl, oder nicht?
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Zyrian
Super JLI'ler



Anmeldedatum: 30.08.2003
Beiträge: 321
Wohnort: Essen
Medaillen: Keine

BeitragVerfasst am: 30.08.2003, 17:32    Titel: Zahl, oder nicht? Antworten mit Zitat

Also, ich hab die MSDN auf und ab gesucht und rumgegoogelt wie blöd.
Meine Frage: Mit welcher Funktion (und in welchem Header ist sie definiert) kann man prüfen, ob eine Variable eine Zahl ist, oder nicht?
ne blöde Frage, aber ich weiß es einfach nicht ^^

mfg
C.
_________________
Schau mir in die Augen, Kleines.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Kampfhund
Super JLI'ler


Alter: 42
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 30.08.2003, 17:51    Titel: Antworten mit Zitat

hm, meinst du, wie man den typ einer variablen abfragen kann
oder meinst du, wie du überprüfen kannst ob ein zeichen aus einem string
eine zahl ist?

wenn du letzteres meinst dann such mal in der MSDN nach "isdigit".
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Zyrian
Super JLI'ler



Anmeldedatum: 30.08.2003
Beiträge: 321
Wohnort: Essen
Medaillen: Keine

BeitragVerfasst am: 30.08.2003, 18:03    Titel: Antworten mit Zitat

ich habe in einem Konsolenprogramm eine Eingabeaufforderung mit cin gemacht. es soll ein Integer eingelesen werden (es handelt sich um eine Altersangabe). wenn dort stattdessen ein Buchstabe etc. eingegeben wird, steckt in der Schleife fest, in der die eben genannte cin eingabe stattfindet. diese schleife läuft solange, bis der benutzer -1 bei dem cin eingibt. und bei einem buchstaben läuft die schleife endlos weiter, ohne auf die eingabe des benutzers zu warten.
deshalb wollte ich vorher prüfen, ob das Eingegebene auch wirklich eine Zahl ist und kein Buchstabe.
in der msdn steht, dass ein boolscher wert bei isdigit zurückgegeben wird
ich hab also vorher schon das folgende probiert: if(isdigit(Alter) == false)
dann kommt aber die fehlermeldung, dass der linke wert ein L-Wert sein muss und so was. andersrum funktioniert es auch nicht...

mfg
C.
_________________
Schau mir in die Augen, Kleines.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 30.08.2003, 18:09    Titel: Antworten mit Zitat

Ich würde einfach den eingelesenen String nehmen, und ihn zeichen für Zeichen überprüfen, ob es die Ziffer 0-9 ist.
Irgendwie verstehe ich die Funktion isdigit nicht.
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 30.08.2003, 18:20    Titel: Antworten mit Zitat

Gugg dir mal die Funktion _ismbcdigit an. Du übergibst ihr einen char und sie gibt true zurück, wenn es eine '0' - '9' ist.
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Zyrian
Super JLI'ler



Anmeldedatum: 30.08.2003
Beiträge: 321
Wohnort: Essen
Medaillen: Keine

BeitragVerfasst am: 30.08.2003, 19:17    Titel: Antworten mit Zitat

Hmm, kann man damit nur zahlen von 0-9 prüfen?
wie siehts mit 2-stelligen zahlen aus?

Anders könnte man das ja lösen, indem man das eingegebene Alter auf seinen Typen prüft, also ob es ein Integer ist etc. Wie würde denn das gehen?

mfg
C.
_________________
Schau mir in die Augen, Kleines.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 30.08.2003, 19:19    Titel: Antworten mit Zitat

Du brauchst doch nur string[0]...string[n] überprüfen, nicht alles auf einmal. Wenn einmal "false" rauskommt, kannst du abbrechen.
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 30.08.2003, 19:51    Titel: Antworten mit Zitat

Als Ergänzung noch isdigit()
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 30.08.2003, 20:23    Titel: Antworten mit Zitat

Mach das ganze doch mit atoi(). Das sollte dann bei nicht gelingen einen speziellen Fehlerwert zurückgeben Wink
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Zyrian
Super JLI'ler



Anmeldedatum: 30.08.2003
Beiträge: 321
Wohnort: Essen
Medaillen: Keine

BeitragVerfasst am: 30.08.2003, 21:13    Titel: Antworten mit Zitat

Das alles bezieht sich jetzt auf die Behandlung eines Strings.
Momentan lese ich mit cin eine Integervariable ein. Muss ich jetzt wirklich den ganzen Code nach den Verwendungen der Integervariable suchen und die dementsprechend auf einen String umstellen, damit ich Funktionen wie atoi() benutzen kann? Die Funktion atoi() konvertiert laut MSDN einen String in einen Integer.
Wenn ich das Eingegebene Stück für Stück untersuchen und jedes mit isdigit() untersuchen will, muss ich dafür doch ein char-Array bzw String verwenden. Oder kann ich das ganze Umgeschreibe durch ein Integer-Array umgehen, das ich Element für Element checken kann?
_________________
Schau mir in die Augen, Kleines.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 30.08.2003, 22:16    Titel: Antworten mit Zitat

Wenn du es dir wirklich so umständlich machen willst dann mache das so:

Code:


int a=IrgendEineZahlDieNieEingegebenWerdenDarf;
cin>>a;
if(a==IrgendEineZahlDieNieEingegebenWerdenDarf)
{
  cout<<"BENUTZ NE ANDERE LÖSUNG ANSTATT DAS HIER !!!\n";
}



Du bekommst also wenn du einige Buchstaben anstatt einer Zahl eingibts den alten Wert von a wieder.
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 31.08.2003, 11:55    Titel: Antworten mit Zitat

AFAIK funzt atoi() mit einem ganz normalen char-pointer. Das müsste dann so aussehen:
Code:
char* variable;
cout<<"Bitte Zahl eingeben: ";
cin>>variable;
if(atoi(variable)==fehlerwert)
{
    cout<<"Falsche Eingabe";
    return;
}

_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Zyrian
Super JLI'ler



Anmeldedatum: 30.08.2003
Beiträge: 321
Wohnort: Essen
Medaillen: Keine

BeitragVerfasst am: 31.08.2003, 18:02    Titel: Antworten mit Zitat

Ok.
Die Methode vom LoP funktioniert bei mir nicht, weil der Compiler meckert: warning C4700: Lokale Variable 'variable' wurde ohne Initialisierung verwendet
Auch nach einer vorherigen Initialierung der Variablen, kommt eine Windowsfehlermeldung. "Die Anweisung in blablabla verweist auf Speicher diesunddas. Der Vorgang written konnte nicht ausgeführt werden etc."

Die Möglichkeit von FallenAngel erscheint mir keineswegs umständlich. In einem kleinen Testprogramm leistete sie genau das, was ich brauchte. Thx dafür!

In meinem Hauptprogramm verwende ich allerdings eine Schleife, die nicht mehr ausgeführt werden soll, wenn das Alter -1 beträgt (bekannt aus dem ersten Buch Wink ).
Wird für Alter ein ungültiger Wert angegeben, der nicht zu einem Integer passt, dann läuft das Programm quasi in einer Endlosschleife und sämtliche cin Anweisungen werden übersprungen (seltsamerweise nur diese, denn die Ausgabe und die restlichen Operationen funktioneren wie gehabt, wie ich an der überschnellen Ausgabe sehen kann), da Alter ja nicht -1 ist. Das Programm versäumt aber, mit den anderen cin Anweisungen Alter einen neuen und möglicherweise auch gültigen Wert zuweisen zu lassen.

Ich erwarte weniger eine komplette Lösung des Problems, mehr würde mich interessieren, warum alle cin Anweisungen übersprungen werden, nur weil ein mal für einen Integer ein Buchstabe oder so was eingegeben wurde.

MFG
Chris
_________________
Schau mir in die Augen, Kleines.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 31.08.2003, 20:18    Titel: Antworten mit Zitat

Zyrian hat Folgendes geschrieben:
Ok.
Die Methode vom LoP funktioniert bei mir nicht, weil der Compiler meckert: warning C4700: Lokale Variable 'variable' wurde ohne Initialisierung verwendet

Ups, sry Embarassed
Wenn du statt
Code:
char* variable;

Code:
char variable[256];

schreibst, sollte es eigentlich funktionieren.
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Zyrian
Super JLI'ler



Anmeldedatum: 30.08.2003
Beiträge: 321
Wohnort: Essen
Medaillen: Keine

BeitragVerfasst am: 01.09.2003, 02:22    Titel: Antworten mit Zitat

Gut, im Prinzip funktionierts dann.
Da ich aber so ein Kerl bin Rolling Eyes der wirklich nicht den geringsten Bug in seinen Programmen haben will (auch wenns nur Übungsprogs sind, wie das aktuelle Beispiel; je früher man Bugs vermeidet, desto einfacher fällt es einem für spätere Programme), ist diese Lösung nicht ganz zufriedenstellend.
Die erprobten Resultate des Programms mit dem char-Array sahen so aus:
Bei Eingabe von einer Zahl -> alles OK, Programm läuft weiter, Ausgabe klappt.
Bei Eingabe von Buchstaben -> alles OK, Programm wird gestoppt
Bei Eingabe von Buchstaben, gefolgt von Zahlen -> alles OK, wird gestoppt
Bei Eingabe von Zahlen, gefolgt von Buchstaben -> nicht OK, da das Programm weiterläuft und in der Ausgabe die Zahlen mitsamt den Buchstaben vorhanden sind.

Die Lösung vom gefallenen Engel war eigentlich super. Aber das konkrete Problem dabei zeigt sich in meinem letzten Post.

MFG
Chris
_________________
Schau mir in die Augen, Kleines.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum