PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ein char Zeichen vom Stream abtrennen - Beginnerfrage



RAHUL
01-12-2005, 15:10
Hallo,

neue einfache Frage in den Raum gestellt,

also ich wollte folgendes


char Input;
cin >> Input;


aber ein Benutzer würde bei Eingabe von zwei und mehr Zeichen,
das Programm zu Absturz führen.
Wie kann ich Input nur das ersten Charzeichen zuweisen oder
noch besser eine Fehlermeldung zurückweisen, wenn mehr als
ein Zeichen eingegeben wird.

für mich blutigen Anfänger sind die Antworten im Netz verwirrend,
kenne mich nicht so gut mit den ganzen Bibliotheken aus,
cin.get() könnte einlesen,
aber ganz verstehe ich nicht, wo danach mein character gespeichert ist,
Hab es mal so probiert, aber gibt einen Speicherzugriffsfehler!


char Input;
char * Inp;
cin.get(Inp, 1);
Input = * Inp;
delete Inp;
Inp = 0;

Worauf deutet der Zeiger Inp, nicht auf den character in meinem stream?

Mit freundlichen Grüssen

Rahul

locus vivendi
01-12-2005, 15:38
also ich wollte folgendes



Code:
char Input;
cin >> Input;

aber ein Benutzer würde bei Eingabe von zwei und mehr Zeichen,
das Programm zu Absturz führen.
Nein, tut er nicht.


Wie kann ich Input nur das ersten Charzeichen zuweisen oder
noch besser eine Fehlermeldung zurückweisen, wenn mehr als
ein Zeichen eingegeben wird.
Das erste passiert bereits. Für das zweite müsstest du nur den Stream nach der Operation auf einen Fehlerzustand testen. Wie das gemacht wird, findet sich in jeder guten Referenz oder Tuturial zu C++.


[...]Hab es mal so probiert, aber gibt einen Speicherzugriffsfehler![...]
Das hat aber nichts mit Iostreams zu tun. Du verwendest einen uninitialisierten Pointer und versuchst den danach sogar noch zu "deleten", wenn du überhaupt bis dahin kommst.

RAHUL
02-12-2005, 17:04
Nein, tut er nicht.



Doch in meinem Programm schon. :D
Ich will den Input für einen char-Array v abfragen und prüfen.
Dazu übernimmt eine Funktion I) CheckInput(v) den Array und
ruft immer eine Funtion II)CheckSpecies für die char-Varibale
und eine Funktion III)CheckSpeciesNum() für die Anzahl der auf
dem array zu besetzenden Plätze ab.
In II) wird die char-Variable deklariert und mit dem cin-stream belegt.
Entspricht sie nicht den Bedingungen, wird II) wieder aufgerufen.
Das klappt nur solange ich einen Zeichen eingebe, andernfalls läuft
eigenartigerweise III) in einer Endlosschleife
(soweit ich das an der Ausgabe erkenne),
in der eine ähnliche Abfrage nur mit USHORT ist.

Wird der Stream aus II) noch weitergeleitet nach III)?

Ach, wenn du mir einen Link zu einer sehr guten Referenz schicken könntest,
wäre das allzu freundlich.:) , habe ich nämlich nicht;)

Rahul

locus vivendi
02-12-2005, 17:26
Ich vermute, dass dein Problem nicht mit der Eingabeoperation für *einen* char zu tun hat, sondern mit einer anderen Eingaboperation z.B. für ein int. Da wird es vermutlich an Fehlerbehandlung mangeln.


Ach, wenn du mir einen Link zu einer sehr guten Referenz schicken könntest,
wäre das allzu freundlich
Also ob sie "sehr gut" ist, weiß ich nicht, aber es ist jedenfalls schon mal eine Referenz:
http://www.dinkumware.com/manuals/reader.aspx?lib=cpp
Ansonsten selber Googeln. Eine Referenz ist nicht immer das beste zum lernen.