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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.