Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

goldfisch007

Alter Hase

  • »goldfisch007« ist der Autor dieses Themas

Beiträge: 446

Wohnort: Süden von Berlin

  • Private Nachricht senden

1

28.10.2009, 01:49

Wie kann man Char's in int Abfrage filtern?

Hi ho guten morgen gute nacht (je nach dem...),

ich hab grad bei meinem spiel nen problem festgestellt,
und je bin ich auf der Lösungssuche bei der irh mir hoffentlich helfen könnt.

Hier der entscheidende Codeteil:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
void function()
{
    int Anzahl;

    std::cout<<"Wie viele Einheiten wollen Sie bauen?"<<std::endl;
    std::cin>>Anzahl;

     // hier kommt nen bissel addiere aba schon uninteressant...

}


also hat wer eine idee was da problem ist?

RICHTIG, da ich meine normalen Menuewechsel durch Buchstaben abfragen realisiere, taucht hier ein problem auf, wenn man z.B. nen char eingibt. Dann flimmert nämlcih die Anzeige nur nocch kurz und springt in
ein menue, das doofe ist halt, dass man keine neuen truppen mehr bauen kann.

Jetzt die entscheidende Frage: kann ich irgendwie chars rausfiltern, ohne die eingabe durch strings zu gestalten und die immer zeichen für zeichen zu über prüfen?

thx
Wir bauen auf und reißen nieder, so ham wir Arbeit ima wieder...
--------------------
http://www.piratenpartei.de/tmp/images/Slogans_5_0.png
--------------------
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender, geklaut von Helmut xD)

Sizzla

Frischling

Beiträge: 72

Wohnort: Klagenfurt

  • Private Nachricht senden

2

28.10.2009, 02:31

Vielleicht hilft ja :

if(Anzahl > 0 && Anzahl < 99)
{
bla bla bla;
}
Künstliche Intelligenz ist leichter zu ertragen als natürliche Dummheit !
--------------------------
http://www.kasser-manuel.com

goldfisch007

Alter Hase

  • »goldfisch007« ist der Autor dieses Themas

Beiträge: 446

Wohnort: Süden von Berlin

  • Private Nachricht senden

3

28.10.2009, 02:35

naja mir geht jez noch nich das
licht auf was das verhindert, da man doch da auch immer noch den char im vergleich hab oder bringt das heir das programm grad nich ausm
tritt

@ sizzla: geil noch einer der zu dieser zeit wach is ...
Wir bauen auf und reißen nieder, so ham wir Arbeit ima wieder...
--------------------
http://www.piratenpartei.de/tmp/images/Slogans_5_0.png
--------------------
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender, geklaut von Helmut xD)

Sizzla

Frischling

Beiträge: 72

Wohnort: Klagenfurt

  • Private Nachricht senden

4

28.10.2009, 03:30

mit: "cin" bekommste ja soweit ich weiß eh einen int wert zurück. Wenn du aber einen char wert brauchst dann nimm einfach cin.get()....



oder versteh ich da was falsch?


PS: Jop hab nachtdienst :D

C-/C++-Quelltext

1
2
3
4
char Auswahl;

cout << "Wieviele: " ;
cin.get();
Künstliche Intelligenz ist leichter zu ertragen als natürliche Dummheit !
--------------------------
http://www.kasser-manuel.com

Toa

Alter Hase

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

5

28.10.2009, 07:08

Wenn ich das richtig verstanden habe, möchtest du die Eingabe von Buchstaben verbieten.
Eine möglichkeit wäre das Char zu einem int zu casten und mit dem Ascii-Zeichensatz zu vergleichen. Dort haben die Buchstaben ja einen bestimmten Bereich.

D.h

C-/C++-Quelltext

1
2
3
4
5
6
//pseudocode


if(cast(Zahl) > min_Ascii_Buchstaben && cast(Zahl) < max_AsciiBuchstaben)
     return false;

 


Der Nachteil ist das natürlich auch Zahlen in diesen Bereich ausgefiltert werden. Aber etwas besseres fällt mir so schnell morgens um 7 auch nicht ein.

grüße Toa

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

6

28.10.2009, 08:31

kannst du nicht den tastaturstatus abfragen?
das einzige was mir einfällt ist über diesem weg ein eigenen "cin" zu schreiben der nur zahlen annimmt. gibt aber bestimmt nen einfachereren weg :/

7

28.10.2009, 09:12

http://www.cplusplus.com/reference/iostream/istream/operator%3E%3E/

Mit dem failbit sollte es möglich sein, alle Strings raus zu filtern, die nicht korrekt konvertiert werden konnten d.h. z.B. kein int oder float darstellen.
Das sollte mit den eingebauten Mitteln sehr leicht und elegant gehen, vorausgesetzt, es ist jetzt das, was du haben willst, so ganz hab ich deine Frage nicht verstanden.
Lieber dumm fragen, als dumm bleiben!

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

8

28.10.2009, 09:58

gut zu wissen^^ :D

danke. (hätte man auch selbst gucken können <.<)

edit: hier ist es ziemlich gut erklärt:
http://www.arachnoid.com/cpptutor/student1.html

FLO2

Treue Seele

Beiträge: 221

Beruf: Schüler

  • Private Nachricht senden

9

28.10.2009, 14:18

Ich hätte des etz so gelöst:

C-/C++-Quelltext

1
2
3
4
5
if (!cin.good())
{
      cin.ignore ();   // Oder andersrum!?

      cin.clear ();     
}



Edit: 200. Post :)
Pi mal Daumen = 18.84955592

Faule Socke

Community-Fossil

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

10

29.10.2009, 22:20

Geben die << und >> Operatoren wirklich einen bool zurück? ich dachte das ist ein std::istream& bzw. std::ostream&, zumindest mach ich meine Operatoren immer so:

C-/C++-Quelltext

1
2
3
4
5
std::istream &operator >> (std::istream &str, my_type &t)
{
// [...]

return str;
}


Kann mich einer aufklären?

Socke

Werbeanzeige