Forum: PC-Programmierung cin char variable eine Zahl eingeben.


von Alex (Gast)


Lesenswert?

Hallo,
ist es möglich bei cin eine char variable als Zahl einzugeben?
1
char var;
2
3
cin >> var ; // 5 eingeben. Soll alls zahl 5 gelesen werden, nicht als Zeichen 5
4
5
//so wie hier 
6
scanf("%d", &var);  // 5 eingeben var = 5

gruß
Alex

von Wilhelm M. (wimalopaan)


Lesenswert?

Alex schrieb:
> Hallo,
> ist es möglich bei cin eine char variable als Zahl einzugeben?
>
>
1
> char var;
2
> 
3
> cin >> var ; // 5 eingeben. Soll alls zahl 5 gelesen werden, nicht als 
4
> Zeichen 5
5
> 
6
> //so wie hier
7
> scanf("%d", &var);  // 5 eingeben var = 5
8
> 
9
>


etwa so:
1
int var = 0;
2
std::cin >> var;

von Dirk B. (dirkb2)


Lesenswert?

Alex schrieb:
> char var;
>
> //so wie hier
> scanf("%d", &var);  // 5 eingeben var = 5

Der richtige Formatspecifier dafür ist "%hhd"

Bei %d werden sizeof(int) Bytes überschrieben. Und dann steht in var nur 
bei little Endian Maschinen der richtige Wert.
Nachfolgende Variablen werden evtl. (abhängig vom Alignement) 
überschrieben.

von Rolf M. (rmagnus)


Lesenswert?

Dirk B. schrieb:
> Alex schrieb:
>> char var;
>>
>> //so wie hier
>> scanf("%d", &var);  // 5 eingeben var = 5
>
> Der richtige Formatspecifier dafür ist "%hhd"
>
> Bei %d werden sizeof(int) Bytes überschrieben. Und dann steht in var nur
> bei little Endian Maschinen der richtige Wert.
> Nachfolgende Variablen werden evtl. (abhängig vom Alignement)
> überschrieben.

Oder anders gesagt: Das Verhalten ist undefiniert, da man damit scanf 
dazu verleitet, in Speicher zu schreiben, der ihm nicht gehört.

von Alex (Gast)


Lesenswert?

Danke euch!
Hab die Frage aber etwas anderes gemeint.

Kann man eine Zahl von 0 - 255 in eine char variable mit cin eingeben 
oder muss man das über Umwege machen.

Das man es mit einem Umweg über eine int Variable machen kann ist mir 
klar. ich wollte wissen ob es direkt geht.
1
char var, var1;
2
// 5 eingeben var = 5
3
scanf("%hhd", &var);  
4
// 5 eingeben var1 = 5
5
std::cin >> var1; // einen cast hier oder irgend ein anderes Flag damit cin die Eingabe nicht als Zeichen interpretiert sondern als Zahl. 
6
7
//var = var1

von Dirk B. (dirkb2)


Lesenswert?

Alex schrieb:
> Hab die Frage aber etwas anderes gemeint.

Das war mir auch klar, da ich aber C++ nicht kann, wollte ich dich auf 
deinen C-Fehler hinweisen.

Alex schrieb:
> Kann man eine Zahl von 0 - 255 in eine char variable

Bei char ist nicht klar, ob es signed oder unsigned ist.
Das ist vom Compiler, bzw. dessen Einstellungen abhängig.

Besser du nimmst statdessen uint8_t.
Das macht es aber leider beim cin auch nicht besser.

Bei der Suche nach "cin uint8_t" kommt immer: gehe über int

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.