Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
magynhard Super JLI'ler
Anmeldedatum: 26.04.2003 Beiträge: 461 Wohnort: Wild durch die Welt ;-) Medaillen: Keine
|
Verfasst am: 20.06.2003, 10:36 Titel: Konsolenanwenung - Weiter mit Enter-Taste |
|
|
Hi,
________
Frage1:
________
hier ist gleich wieder eine Frage für mein Konsolenspiel
Wie kann ich es realisieren, dass man nur Enter drücken muss, damit es weitergeht (weil ich halt eine Pause brauche).
Hab das momentan so gelöst, das man per
Code: |
cin >> IntegerWert;
|
"angehalten" wird, jedoch eine Zahl eingeben muss, dass es weitergeht, was natürlich nur eine schlechte Notlösung darstellt.
In älteren Beiträgen wurde irgendetwas mit cin.get(); gesagt, dass man das dafür "missbrauchen" kann? Aber wie genau? Ich hab da leider nichts zustande bekommen.
Oder gibt es bessere Alternativen
________
Frage2:
________
In meinem Programm kommen Zahleneingaben (cin >> short/int-Variable;) vor, aber wenn man keine Zahl sondern zum Bsp. einen Buchstaben eingibt, dann ... ihr kennt das sicherlich.
Man könnte das umständlich so machen, dass man die Eingabe einer char-Variable (Feld) zuweißt, dann überprüft ob es Zeichen von 0-9 sind und wenn das der Fall ist, wieder in short/int umwandeln und somit den Fehler abfangen.
Aber da das Problem meiner Meinung nach bestimmt sehr bekannt ist und häufiger vorkommt, dachte ich mir, dass es dafür vielleicht schon irgendetwas gibt, dass ungültige Zeicheneingaben bei Variablen, die nur Zahlen speichern können, nicht zulässt. Oder ? _________________ Niemand ist hoffnungsloser versklavt als der, der fälschlich glaubt frei zu sein. [J. W. Goethe]
|
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 20.06.2003, 12:46 Titel: |
|
|
Zu Frage 1:
while(!kbhit());
So gings damals zu DOS Zeiten... sollte für Konsolenanwendungen aber auch noch funktionieren.
Zu Frage 2:
Du könntest erst einen String einlesen und dann mit atoi() umwandeln und guggn, ob er korrekte Werte enthält(atoi() gibt 0 zurück, wenn was Falsches im String steht). _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
magynhard Super JLI'ler
Anmeldedatum: 26.04.2003 Beiträge: 461 Wohnort: Wild durch die Welt ;-) Medaillen: Keine
|
Verfasst am: 20.06.2003, 14:01 Titel: |
|
|
Danke für die Antwort, jedoch funktioniert
nicht.
->> undeclared identifier.
Hab dann halt mal aus Logik versucht, einige headderdateien wie windows.h, etc.. einzubinden, hat aber nicht geholfen.
Gibt es eine passende headderdatei?
Ansonsten muss ich ja auf was anderes ausweichen.
Zitat: |
Du könntest erst einen String einlesen und dann mit atoi() umwandeln und guggn, ob er korrekte Werte enthält(atoi() gibt 0 zurück, wenn was Falsches im String steht).
|
Und was ist in einem String "falsch"?
Daraus kann ich mir höchstens vorstellen das man bei atoi festlegen kann, was falsch und nicht falsch ist?
Oder meintest du, dass atoi generell überprüft ob es sich dabei nur um Zahlen handelt?
Ich werd mal in der MSDN nach atoi() guggn, mal schaun ob die mich da schlau machen kann [/quote] _________________ Niemand ist hoffnungsloser versklavt als der, der fälschlich glaubt frei zu sein. [J. W. Goethe]
|
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 20.06.2003, 14:07 Titel: |
|
|
> Gibt es eine passende headderdatei?
Gugg in der MSDN! ;P
> Oder meintest du, dass atoi generell überprüft ob es sich dabei nur um
> Zahlen handelt?
Wenn es keine Zahl ist, wird 0 zurückgegeben. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
magynhard Super JLI'ler
Anmeldedatum: 26.04.2003 Beiträge: 461 Wohnort: Wild durch die Welt ;-) Medaillen: Keine
|
Verfasst am: 20.06.2003, 14:11 Titel: |
|
|
Danke, hab
conio.h
in der MSDN gefunden und es funzt
atoi werd ich dann gleich mal ausprobiern und hier dann bescheid geben, ob ich damit erfolgreich arbeiten konnte _________________ Niemand ist hoffnungsloser versklavt als der, der fälschlich glaubt frei zu sein. [J. W. Goethe]
|
|
Nach oben |
|
|
=]Mid[=]Night[= Super JLI'ler
Anmeldedatum: 20.11.2002 Beiträge: 380 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 20.06.2003, 19:49 Titel: |
|
|
Probiers ma aus mit
Dann wird angezeigt
Drücken Sie eine beliebige Taste ...
und das Programm wartet genau darauf.[/code] |
|
Nach oben |
|
|
magynhard Super JLI'ler
Anmeldedatum: 26.04.2003 Beiträge: 461 Wohnort: Wild durch die Welt ;-) Medaillen: Keine
|
Verfasst am: 20.06.2003, 20:59 Titel: |
|
|
Danke, das
system("pause");
hat sogar einen Vorteil, der Tastendruck wird nicht für die nächste Eingabe verwendet, was ich bemängelt habe, weil dann bei der Eingabe schon zwei Absätze gemacht waren, etc..
Passt sich das system("pause"); der Sprache automatisch an, also wenn das Programm jetzt auf einem Rechner gestartet wird, der mit englischer Version wäre, wäre es englisch? Weil ich möchte am Ende noch übersetzte Versionen von meinem mehr oder weniger interessanten Spiel veröffentlichen.
So nebenbei:
Ich konnte in der MSDN nichts über system("");-Befehle finden, verwende ich nur falsche Stichwörter oder stehn die da net drin und sind wo anderst zu finden? _________________ Niemand ist hoffnungsloser versklavt als der, der fälschlich glaubt frei zu sein. [J. W. Goethe]
|
|
Nach oben |
|
|
Jörg JLI MVP
Anmeldedatum: 19.07.2002 Beiträge: 182 Wohnort: Siegen/NRW Medaillen: Keine
|
Verfasst am: 20.06.2003, 22:51 Titel: |
|
|
1. Du kannst auch _getch() benutzen (benötigt conio.h)
2. Folgender Code sichert, dass Buchstaben statt Zahlen in Eingaben nicht zu unerwünschten Ergebnissen führen:
Code: | int nZahl=0;
do
{
bool bValid=true;
cin >> nZahl;
if (cin.fail())
{
cin.clear();
cin.ignore(80,'\n');
cout << "fehler in eingabe" << endl;
bValid=false;
}
}
while (!bValid); |
_________________ www.messiahzone.de.vu |
|
Nach oben |
|
|
=]Mid[=]Night[= Super JLI'ler
Anmeldedatum: 20.11.2002 Beiträge: 380 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 21.06.2003, 17:15 Titel: |
|
|
Zu deiner ersten Frage:
Ja, der Befehl passt sich der Sprache an.
Zur zweiten:
In der MSDN steht schon was über system().
System funktioniert so, dass du als Parameter irgendeinen Befehl übergibst, den du auch so im Konsolenfenster eingeben könntest, der dann ausgeführt wird.
Probier doch mal aus: pause eingeben und dann Enter drücken. |
|
Nach oben |
|
|
|