www.mikrocontroller.net

Forum: PC-Programmierung char cast


Autor: Hanz (Gast)
Datum:

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

Autor: alex (Gast)
Datum:

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

Autor: Hanz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich benutz den GNU - Compiler.
Hm sehr komisch....

Autor: Marco S (Gast)
Datum:

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

Autor: Rolf Magnus (Gast)
Datum:

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

Autor: Hanz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok
thx @ all

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.