Datentypen - falsche Eingabe

Luna1000

Mitglied
Hallo zusammen,

ich habe ein Verständnisproblem, wäre toll wenn mir einer auf die Sprünge helfen kann.
Und zwar, ist es ja logisch, dass wenn man für eine Variable vom Datentyp int einen Buchstaben z.B. e eingibt, die Ausgabe nicht e sein wird. Dafür aber 2. Bei short wäre es eine 0 und bei float 2.8026e-045.
Wie genau hängt das jetzt zusammen? Ich steige da nicht ganz dahinter. Hat das was mit der Speichergröße zu tun?

Danke schon mal

Luna
 
Hm, meinst du sowas:
C++:
unsigned int i(0);
std::cin >> i; // eingabe 'e'
std::cout << i << std::endl // ausgabe '101'
? Das liegt schlicht an dem verwendeten Zeichensatz. Jedem Zeichen ist eine Zahl zugeordnet. Ein PC kennt nunmal nur 1 u. 0 und damit das Dual/Binärsystem ;)

Bei short kann es eigtl. nicht 0 sein, da der Wertebereich weder überschritten wird noch sonst was. Du kannst demnach unsigned int oben durch unsigned short ersetzen und das Ergebnis ist identisch!
 
hallo,

also wenn ich z.B. folgendes mache
Code:
    short a; 
    cin >> a;    
    cout << a << endl;

und für a den Buchstaben e eingebe, dann gibt es mir 0 aus. Mache ich das mit einem beliebigen anderen Buchstaben kommt auch null raus. Dann ist doch aber in diesem Fall nicht jeder Buchstabe einer Zahl zugeordnet.
für int wird dann 2 ausgegeben. Warum?
 
Hi.
Hm, meinst du sowas:
C++:
unsigned int i(0);
std::cin >> i; // eingabe 'e'
std::cout << i << std::endl // ausgabe '101'
? Das liegt schlicht an dem verwendeten Zeichensatz.
Das ist allerdings Unsinn und du hast es mit Sicherheit nicht ausprobiert.

Die Ausgabe muss in diesem Fall 0 sein. Die Eingabe 'e' ist bei einem unsigned int kein gültiges Zeichen und die formatierte Eingabeoperation schlägt fehl, es wird nichts eingelesen und die Variable i auch nicht verändert.

@Luna1000: Du mußt erstmal deinen Code zeigen. Wie liest du denn die Werte ein? Mit den Streamoperatoren kannst du keine Werte einlesen, die nicht dem erwarteten Format entsprechen.

Gruß
 
hallo,

also wenn ich z.B. folgendes mache
Code:
    short a; 
    cin >> a;    
    cout << a << endl;
Wenn du das so machst, ist es einfach Zufall was dort ausgegeben wird. Du hast die Variable nicht initialisiert und damit hat diese einen zufälligen Wert. Wie ich bereits sagte schlägt die Eingabe bei ungültigen Zeichen fehl und a hat den gleichen Wert wie vor der Eingabe.

Gruß
 
Hallo deepthroat,

ok, initialisiert habe ich sie nicht bei der Deklaration aber natürlich durch cin. Ja. Dass es nicht richtig ist weiß ich, das ist mir klar. Aber egal an welchem rechner ich in diesem programm einen beliebigen buchstaben eingebe, wird mir IMMER 2 angegeben. Deswegen bin ich davon ausgegangen, dass es nicht Zufall ist und habe einen Sinn darin gesucht :)
Aber ok, dann ist es Zufall. Danke für Deine Antwort.

Grüße Luna
 
ok, initialisiert habe ich sie nicht bei der Deklaration aber natürlich durch cin.
Das ist keine Initialisierung. Es ist ja nicht mal klar ob die Variable überhaupt verändert wird.

"Echten" Zufall gibt es im Computer nicht. Die Speicherzellen die der Variablen zugeordnet sind haben einen Wert (der durch vorherige Verwendung bestimmt wird). Daher kann es sein, das es immer der gleiche Wert ist wenn du das gleiche Programm ausführst, denn das Programm ist ja deterministisch. Wenn du das Programm mit einem anderen Compiler kompilierst wird es vermutlich ein anderer Wert sein. (evtl. reichen auch schon andere Compiler-Flags)

Gruß
 
Zurück