char cast

Gast #417140
Hallo, ich habe mal ne frage an alle erfahrenen c-programmierer.
Also wenn ich das richtig verstanden habe ist es möglich mit char zu
rechnen wie mit int indem man die Zahl über den %d operator einliest.
(z.B. scanf("%d",&x);) Stimmt das ?

Ich habe ein kleines Beispielprogramm erstellt, dass nicht das macht
was ich erwartet habe. Es wäre super wenn irgendwer es mir erklären
könnte:

int main(void)
{
  char x,y,z;
  scanf("%d",&x);        // z.B 5
  scanf("%d",&y);        // z.B 6
  scanf("%d",&z);        // z.B 7
  printf("%d\n",x);
  printf("%d\n",y);
  printf("%d\n",z);
  return 0;
}

Nach Eingabe der Zahlen 5,6,7 hätte ich eigentlich die Ausgabe von
5
6
7
erwartet. Allerdings erscheint:
0
0
7
??? Woher kommen die ersten beiden Nullen und wo sind meine 5 und 6 hin
?
Bitte um Hilfe
Gruß Hanz
Gast #417143
Hallo.

Mein C-Grundlagenbuch sagt, daß der Formatstring "%d" eine ganze
Dezimalzahl vom Typ int ist. Vielleicht hilft ja:

int x,y,z;

oder

char x,y,z;
int t;
scanf("%d", &t);
x = (char) t;

denn char und int unterscheiden sich. Char ist 8-bittig und int belegt
2 bis 4 Byte, je nach Computersystem. Beim avr-gcc wohl 16 Bit.
Gast #417144
> Also wenn ich das richtig verstanden habe ist es möglich mit char
> zu rechnen wie mit int indem man die Zahl über den %d operator
> einliest.

Du wirfst hier zwei Sachen durcheinander. char ist ein Integerdatentyp,
der sich wie alle anderen Integers verhält. Aber Vorsicht, je nach
Compiler kann char signed oder unsigned sein, also zum Rechnen lieber
explizit signed char oder unsigned char benutzen.

> (z.B. scanf("%d",&x);) Stimmt das ?

Nein. %d steht für int. Bei printf darf es auch für char eingesetzt
werden (wird eh bei Übergabe automatisch nach int konvertiert), aber
bei scanf übergibt man ja Zeiger, und da muß der Typ 100%ig stimmen.
Ich glaube, es gibt für char keinen entsprechenden Format-Modifier.
Also mußt du erst in einen int lesen und dann in einen char
konvertieren.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 20 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.