cin char variable eine Zahl eingeben.

#5417692
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.
#5418709
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.
Gast #5421879
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
#5422036
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren