unsigned char mit scanf befüllen? Formatstring?



  • Hallo Forum.

    Ich habe eine unsigned char variable, die ich gerne über die Tastatur befüllen möchte. Dazu nutze ich scanf. Nur wie ist dort der Formatstring? Ich komme nicht drauf.

    Habe es bislang nach Suche im Internet wie folgt probiert:

    scanf("%2hhu:%2hhu", &curelement->TDh, &curelement->TDm);
    

    Es geht um die Eingabe einer Uhrzeit im Format "hh:mm". Also z.B. 10:45

    Es funktioniert nicht! 😞 TDh erhält den gewünschten Wert, TDm wird 0 und oft wird eine nachfolgende Variable der gleichen Struktur vom Inhalt her zerstört.

    Das ganze ist über eine verkettete Liste gemacht. Aber ich glaube nicht, dass das so wichtig ist, nur der Vollständigkeit halber^^.

    Gruß, Franky



  • Ein Char ist, wie man dem Namen schon entnehmen kann, ein Zeichen. Also kannst du nicht die Zahl "10" in ein Char einlesen, sondern nur die Zeichen '1' und '0' - also zwei Charactere. Du müsstest zuerst diese Zahlen in Integer (oder Shorts) einlesen und dann den Wert in deine Char-Variable kopieren. Wobei char eben falsch gewählt ist, da du ja Zahlen speichern willst, keine Zeichen.



  • Er kann es aber einfach als Zahl einlesen mit %d oder %i.



  • der Datentyp ist vom prof vorgegeben. 😃



  • Genmutant schrieb:

    Er kann es aber einfach als Zahl einlesen mit %d oder %i.

    Das sagte ich doch, er muss es zuerst in einen Integer oder Short einlesen, und dann in das Char kopieren.



  • Ah ne sry war ne blöde Idee die ich da grade hatte ^^
    Das mit dem casten funktioniert glaub ich doch so nich wie ich mir das grade vorgestellt hab. Is aber auch noch viel zu früh am Morgen 😉



  • Die Idee mit dem eher umständlichen casten über die int-Zwischenvariablen klappt. Danke.

    Also gehe ich recht in der Annahme, dass es solch einen Formatstring, der eine eingegebene Zahl in einem unsigned char ablegt, nicht gibt? 😡



  • Nein, gibt es nicht. Denn du missbrauchst einen Datentyp.



  • Naja, lernen wir hier in der Uni so, von wegen Speicher sparen und festgelegter Teil der Aufgabe... 😞



  • Speicher sparen? Oh ja, ihr spart 2 byte, dadurch dass ihr 2 mal char statt 2 mal short nehmt! Und das bei heutigen Systemen mit GIGABYTE Speicher. 🙂 Davon mal abgesehen, dass diese char's höchstwahrscheinlich vom Compiler sowieso gepadded werden und ihr somit keinen Speicher spart.



  • Wie wärs dann wenn du uint8_t benutzt? Unsigned Integer, mit 8 Bit Größe, bzw. so groß wie ein char. (Also mind. 8 Bit)

    Dann funktioniert dein %hhu auch.
    Du brauchst den Header stdint.h, der bei C99 Standard ist.

    EDIT: Janjan, es gibt durchaus viele Anwendungsgebiete wo es auf jedes Byte ankommt. Mal Mikrocontroller mit 64Byte Arbeitsspeicher benutzt? 😉



  • Des ist ein Prog für den Windows-PC. Also nix mit miniwenig Speicher...

    Und ich darf die Datentypen eben nicht ändern, weil sie vorgegeben sind. Sonst würde ich da auch einfach nen kleines Int draus machen, wenns meins wäre.

    Und selbst wenn sparen, die 2 gesparten Bytes verballer ich ja wieder für die für das casten nötigen zusätzlichen Befehle und die zusätzlichen Int-Variablen. 😃

    Ob das alles in 2 byte passt???? 😃 😃

    edit:

    Die Char-Variablen gehören zu den Datensätzen einer kleinen Mini-Datenbank für Flugdaten mit max. 16 Datensätzen. Da ist auch je ein String mit fester Länge drin, der den Zielort aufnimmt. Dynamische Strings hätten wohl mehr Spareffekt.



  • Um welchem Compiler handelt es sich denn? Die hh-flags sind eine "Neuheit" aus C99, wenn das der Compiler nicht kann... Gibt es Warnungen die du uns vorenthältst?


Anmelden zum Antworten