mikrocontroller.net

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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ist es möglich bei cin eine char variable als Zahl einzugeben?
char var;

cin >> var ; // 5 eingeben. Soll alls zahl 5 gelesen werden, nicht als Zeichen 5

//so wie hier 
scanf("%d", &var);  // 5 eingeben var = 5


gruß
Alex

Autor: Wilhelm M. (wimalopaan)
Datum:

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


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

Autor: Dirk B. (dirkb2)
Datum:

Bewertung
-1 lesenswert
nicht 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.

Autor: Rolf M. (rmagnus)
Datum:

Bewertung
1 lesenswert
nicht 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.

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.
char var, var1;
// 5 eingeben var = 5
scanf("%hhd", &var);  
// 5 eingeben var1 = 5
std::cin >> var1; // einen cast hier oder irgend ein anderes Flag damit cin die Eingabe nicht als Zeichen interpretiert sondern als Zahl. 

//var = var1 

Autor: Dirk B. (dirkb2)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.