Forum: PC-Programmierung char cast


von Hanz (Gast)


Lesenswert?

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

von alex (Gast)


Lesenswert?

Bei mir funktioniert das Beispiel so wie es soll.(MS Visual C++ Studio)
Welchen Compiler benutzt du?

von Hanz (Gast)


Lesenswert?

Ich benutz den GNU - Compiler.
Hm sehr komisch....

von Marco S (Gast)


Lesenswert?

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.

von Rolf Magnus (Gast)


Lesenswert?

> 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.

von Hanz (Gast)


Lesenswert?

ok
thx @ all

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.