Frage zum C Tutorial (auf tutorials.at)

Schnelle objektorientierte, kompilierende Programmiersprache.
Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: Frage zum C Tutorial

Beitrag von fat-lobyte » So Jan 18, 2009 4:46 pm

soufian88 hat geschrieben:Hallo.
Ich will mit dem %u zeichen das die negative Zahl in ein Positive Zahl ausgegeben wird aber hoffnungslos hundertmal im compiler kompiliert und wiederholt und nachgedacht und bin kein schritt weitergekommen.

kann mi bitte vielleicht jemand dabei helfen:

Code: Alles auswählen

#include <stdio.h>
 
int main()
{
  int a = -12345;
  printf ("Wert der Variable a als positive Zahl behandelt: %u.", a);
 
  return 0;
}
Anstatt das 12345 als Zahl kommt kommt ein ganz andere Zahl


Danke im vorraus
%u gibt nicht einfach eine "Positive Zahl" aus, sondern eine VORZEICHENLOSE Zahl. Das heißt, die Variable die du übergibst wird so behandelt, als ob es ein "unsigned int" ist, obwohl sie das gar nicht ist. Vorzeichenlose zahlen sind nach einem einfachen Schema kodiert. Positive Vorzeichenbehaftete auch, nur negative Vorzeichenbehaftete nicht! Details dazu kannst du hier nachlesen: http://tutorial.proggen.org/doku.php?id ... ystems:bin
Ist ein bisschen schwer zu verstehen. Wenn dir das zu kompliziert ist, lass dir einfach nur sagen:

%d ist für Datentyp "int",
%u ist für Datentyp "unsigned int".

mfg, fat-lobyte
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Frage zum C Tutorial

Beitrag von Kerli » So Jan 18, 2009 4:50 pm

Zuerst einmal herzlich willkommen im Forum.

Die Frage wie du zu uns gefunden hast dürfte sich inzwischen erübrigt haben ;) Falls du Lust hast kannst du dich hier auch kurz vorstellen.
soufian88 hat geschrieben: Ich will mit dem %u zeichen das die negative Zahl in ein Positive Zahl ausgegeben wird aber hoffnungslos hundertmal im compiler kompiliert und wiederholt und nachgedacht und bin kein schritt weitergekommen.
[...]
Anstatt das 12345 als Zahl kommt kommt ein ganz andere Zahl
Jetzt aber zu deinem Problem. Es ist eigentlich kein Wunder, dass du nicht die gewünschte Zahl bekommst, da durch das %u nur der erhaltenen Wert anders interpretiert wird und nicht umgerechnet wird. Negative Zahlen werden nun einmal anders dargestellt als positive. Wir haben dazu auch einen Artikel in unserem Wiki, wo das genauer erklärt wird.

Damit dein Wert jetzt positiv wird würde ich einfach die Funktion 'abs' aus der 'math.h' nehmen, die einfach den Betrag der übergebenen Zahl zurückgibt, also genau das was du brauchst.

edit: Da war wohl wer schneller als ich :) Aber die Lösung funktioniert trotzdem...
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Benutzeravatar
tutorials.at
Beiträge: 10
Registriert: Mo Jan 19, 2009 2:23 pm
Wohnort: Wien
Kontaktdaten:

Re: Frage zum C Tutorial

Beitrag von tutorials.at » Mo Jan 19, 2009 3:21 pm

Hallo,

das ist kein Irrtum.
Das Beispiel dient dazu, um genau diesen Fall zu demonstrieren.

Aus diesem Grund steht darunter:
http://www.tutorials.at/c/03-dateneingabe-ausgabe.html#printf hat geschrieben:Überrascht vom Ergebnis? Der Grund dafür ist, dass beim Abspeichern einer negativen Zahl von dieser das Zweier-Komplement (Bits werden invertiert und 1 addiert) gebildet wird. Die umgewandelte Zahl sehen Sie als Ergebnis.
In der Übersichtstabelle steht:
%u | unsigned int | Natürliche (Dezimal-)Zahl (pos. Zahl)
Ich kann nachvollziehen, dass das als Erklärung für Anfänger noch nicht ausreicht.
Ich habe jetzt noch einmal nachgebessert, eine Erklärung und ein weiteres Beispiel dazu ergänzt,
siehe: http://www.tutorials.at/c/03-dateneingabe-ausgabe.html.

Dass kein "\n" im Beispiel vorkommt, liegt daran, dass das der Leser (ohne Vorkenntnisse) zu dem Zeitpunkt noch nicht kennt! Escape-Sequenzen folgen erst nachher, in Abschnitt 3.2.

Schöne Grüße,
Andreas Hammer
Webmaster und Autor von Tutorials.at,
überarbeitet und erweitert 2008/2009, mit Tutorials zu C, Pascal und BASIC.

Benutzeravatar
soufian88
Beiträge: 288
Registriert: So Jan 18, 2009 1:01 pm

Re: Frage zum C Tutorial

Beitrag von soufian88 » Mo Jan 19, 2009 3:59 pm

Hallo.
Ich dank dir das du es für mich noch EXTRA VERBESSERST.
Jetzt wird es mir klar.
Danke für die Antwort. :D

Aber noch ein Frage wie hast du mich hier gefunden ? :D
C ( Durchschnittlich ) C++ (am Lernen)

Benutzeravatar
tutorials.at
Beiträge: 10
Registriert: Mo Jan 19, 2009 2:23 pm
Wohnort: Wien
Kontaktdaten:

Re: Frage zum C Tutorial

Beitrag von tutorials.at » Mo Jan 19, 2009 4:05 pm

Naja, ich kenne das Forum.
Ich verlinke es schließlich auch. :D

@alle anderen, @Xin
Wir müssen noch etwas gegen das "Abgrenzungsproblem" / die Verwechslungsgefahr tun (proggen.org als eigene Seite).
Vielleicht hat jemand Ideen für einen ergänzenden Text für http://www.tutorials.at/forum.html.
Webmaster und Autor von Tutorials.at,
überarbeitet und erweitert 2008/2009, mit Tutorials zu C, Pascal und BASIC.

Benutzeravatar
soufian88
Beiträge: 288
Registriert: So Jan 18, 2009 1:01 pm

Re: Frage zum C Tutorial

Beitrag von soufian88 » Mo Jan 19, 2009 4:07 pm

Man habe ich ein Glück du bist sogar seit gestern Registriert.
C ( Durchschnittlich ) C++ (am Lernen)

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: Frage zum C Tutorial

Beitrag von fat-lobyte » Mo Jan 19, 2009 4:11 pm

tutorials.at hat geschrieben:Naja, ich kenne das Forum.
Ich verlinke es schließlich auch. :D

@alle anderen, @Xin
Wir müssen noch etwas gegen das "Abgrenzungsproblem" / die Verwechslungsgefahr tun (proggen.org als eigene Seite).
Vielleicht hat jemand Ideen für einen ergänzenden Text für http://www.tutorials.at/forum.html.
Na Willkommen im Forum Andreas Hammer! Bitte stell dich doch in unserem Vorstellungsthread vor!

Ansonsten hast du recht, aus den Verwechslungen resultieren einige Missverständnisse. Wenn wir Fragen über "das Tutorial" lesen, dann denken wir selbstverständlich gleich an www.proggen.org .
Haters gonna hate, potatoes gonna potate.

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Frage zum C Tutorial

Beitrag von nufan » Mo Jan 19, 2009 4:48 pm

fat-lobyte hat geschrieben:Wenn wir Fragen über "das Tutorial" lesen, dann denken wir selbstverständlich gleich an http://www.proggen.org .
Ist jetzt eigentlich proggen.org das gleiche wie tutorial.proggen.org?

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: Frage zum C Tutorial

Beitrag von fat-lobyte » Mo Jan 19, 2009 5:02 pm

dani93 hat geschrieben:
fat-lobyte hat geschrieben:Wenn wir Fragen über "das Tutorial" lesen, dann denken wir selbstverständlich gleich an http://www.proggen.org .
Ist jetzt eigentlich proggen.org das gleiche wie tutorial.proggen.org?
Keine Ahnung, die details der Weiterleitung musst du Xin fragen. Zumindest ist proggen.org die gleiche seite wie tutorial.proggen.org.
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Frage zum C Tutorial

Beitrag von Xin » Di Jan 20, 2009 1:44 pm

Hallo Andreas,

Zum ersten begrüße ich es, Dich jetzt hier als Mitglied zu sehen.
tutorials.at hat geschrieben:@Xin
Wir müssen noch etwas gegen das "Abgrenzungsproblem" / die Verwechslungsgefahr tun (proggen.org als eigene Seite).
Vielleicht hat jemand Ideen für einen ergänzenden Text für http://www.tutorials.at/forum.html.
Empfehle Deinen Lesern, im Betreff zusätzlich zur Frage "(tutorials.at)" hinzufügen.
dani93 hat geschrieben:Ist jetzt eigentlich proggen.org das gleiche wie tutorial.proggen.org?
Zu Beginn, als das Wiki noch nicht wirklich existierte, war das Forum auf der Hauptdomain und wir überlegten eine Portalseite zu machen.
Inzwischen ist das Wiki informativ und das Forum ist ebenfalls gut erreichbar.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten