Komische Ausgabe eines Wertes [C/C++]

  • C

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Trade.

    Komische Ausgabe eines Wertes [C/C++]

    Hallo Community,

    ich beschäftige mich derzeit mit C/C++, spezifisch zurzeit mit Pointern. Nun habe ich ein kleines Programm geschrieben welches mir die Speicheradresse und den Wert anzeigt.
    Sollte recht simpel sein, doch leider stimmt das Ergebnis nicht mit der Eingabe überein. Hier mal der Code:

    C-Quellcode

    1. #include <stdio.h>
    2. int main (){
    3. unsigned long long anzahl;
    4. printf("Wert eingeben:");
    5. scanf ("%d", &anzahl);
    6. printf("An Speicheradresse 0x%08x steht der Wert %d",&anzahl, anzahl);
    7. return 0;
    8. }


    Bei Eingabe eines Wertes von 112233445566 kommt folgende Ausgabe:

    Wert eingeben:112233445566
    An Speicheradresse 0x0029ff0c steht der Wert 564295870
    Process returned 0 (0x0) execution time : 7.050 s
    Press any key to continue.


    Ich weiß leider nicht wie dieser komische Wert zustande kommt, da ich ja die zahl also Dezimalzahl darstellen lasse.
    Wo viel kopiert wird, wird wenig kapiert.
    Andreas Tenzer
    (Dt. Philosoph, * 1954)
    Hi @F4talError,

    hab das ganze auch mal ausprobiert:

    Quellcode

    1. C:\>wert.exe
    2. Wert eingeben:123456789
    3. An Speicheradresse 0x0035fa40 steht der Wert 123456789
    4. C:\>wert.exe
    5. Wert eingeben:112233445566
    6. An Speicheradresse 0x0057f8d0 steht der Wert 564295870
    7. C:\>wert.exe
    8. Wert eingeben:987654321
    9. An Speicheradresse 0x0045fd54 steht der Wert 987654321
    10. C:\>wert.exe
    11. Wert eingeben:1122334455
    12. An Speicheradresse 0x0025fc9c steht der Wert 1122334455
    13. C:\>wert.exe
    14. Wert eingeben:11223344556
    15. An Speicheradresse 0x0036fc20 steht der Wert -1661557332
    16. C:\>


    Schau dir mal die letzen 2 Eingaben an...fällt dir was auf?
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    Falsche Printf-Specifier. Für long long nimmt man für gewöhnlich %lld.
    Aber gewöhn dir printf bitte erst gar nicht an, das ist der reinste Clusterfuck und verdammt fehleranfällig.

    Versuch mal cout/cin:

    C-Quellcode

    1. ​#include <iostream>
    2. using namespace std;
    3. int main()
    4. {
    5. unsigned long long anzahl = 0;
    6. cout << "Wert eingeben: ";
    7. cin >> anzahl;
    8. cout << "An Speicheradresse 0x" << &anzahl << " steht der Wert " << anzahl << endl;
    9. return 0;
    10. }
    @Radinator

    Hm.. Ab der 11. Zahl wird das Ergebnis negativ, aber das ist wohl nicht das was mir auffallen sollte. :/

    @Rinecamo

    Welche Vorteile hat denn cout/cin, die Fehleranfälligkeit ist mir bewusst, doch gibt es bei cout/cin noch weitere Vorteile?
    Wieso wird es mir dann in der Uni ans Herz, irgendeinen Vorteil muss es dann ja auch bei printf bzw scanf geben.
    Wo viel kopiert wird, wird wenig kapiert.
    Andreas Tenzer
    (Dt. Philosoph, * 1954)
    printf ist C. Wenn Du C++ nutzt, dann nimm auch die entsprechenden Sachen. ;)
    Und zu Deiner Frage: stackoverflow.com/questions/2872543/printf-vs-cout-in-c

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!: