Ergebnis 1 bis 4 von 4
  1. #1
    Don't be evil Avatar von gigu
    Registriert seit
    03.09.2008
    Beiträge
    267

    Standard C Format Problem

    Hallo
    Ich würde gerne in C eine Zahl mit vorne anghängten nullen ausgeben.
    die nullen müssen varieren, da sie vom benutzer eingegeben werden. Das heisst also das die nullen auch mit eingelesen werden müssen und man sie nicht nur bei beim printf anhängen kann.

    z.B. so:

    int x=001;
    printf("%d",x);


    x kann nacher der Benutzer selbst defieneren sieht etwa so aus: 01, 001, 0001, 00001,000001 etc...

    Jetzt ist allerdings das Problem das die Nullen bei der Ausgabe immer weggelassen werden.
    Kennt jemand so ein flag oder ein bestimmtes formatelement mit dem die nullen mitgespeichert oder nicht weggelassen werden?

    vielen dank

  2. #2
    Stanley Jobson Avatar von GregorSamsa
    Registriert seit
    23.08.2008
    Beiträge
    729

    Standard

    So einfach geht das nicht.
    C Interpretiert eine 0001 wie eine 1 - das heißt, dass eventuell vorhandene Nullen automatisch abgeschnitten werden.
    Du kannst die Länge der Ausgabe einstellen, dann würde die vorne mit 0'en aufgefüllt.
    Alternativ müsstest du mit Strings arbeiten.

  3. #3
    Der mit Anatidaephobie Avatar von blackberry
    Registriert seit
    11.07.2008
    Beiträge
    2.350

    Standard

    Du kannst bei printf angeben, wieviele Zeichen etwas haben soll.
    Dies gilt auch für Integer.
    Dabei kannst du auch angeben, wie diese Zeichen aufgefüllt werden sollen (falls dein Integer nicht soviele Stellen hat).

    Dies Funktioniert so: %05d das 05 Steht dabei für: 5 Stellen sollen angezeigt werden und nicht besetzte Stellen sollen mit 0en aufgefüllt werden.

    Willst du die Anzahl der Stellen variieren musst du das erste Argument für printf anpassen bzw. vom Programm generieren lassen.
    Das sähe ungefähr so aus:


    P.S.: wenn du sowas wie int i = 00123; verwendest, dann sorgt die erste Null dafür, dass die Zahl vom Compiler als Oktalzahl (zur Basis 8) interpretiert wird. Das sorgt dann für unerwartete Ergebnisse, wenn du davon ausgehst, dass 00123 auch 123 im Dezimalsystem ist (was nicht der Fall ist; das wäre nämlich 83 dezimal).


    MfG. BlackBerry

    PDFTT cr3w a.E. — ReiDC0Re, lindor, Sera, berry
    please do feed the trolls crew and elk
    Ehrenwerte Mitglieder im Ruhestand: OpCodez, SFX.
    "Was sich blackberry gerade denkt" — Vorsicht! Frei laufender Wahnsinn!
    Zitat von fuckinghot19: "PS: Blackberry ist auf FH der Trollkönig ^^."
    An dieser Stelle danke ich all meinen Fans und Hatern gleichermaßen ^.^

  4. #4
    Das Leben ist der Lehrer Avatar von DoS
    Registriert seit
    18.08.2008
    Beiträge
    528

    Standard

    Code:
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        char data[20]; // Deklaration des Char Arrays
        
        cin.get(data,19); // 1 weniger, da noch die Escape Sequenz dazu kommt
        
        cout<<data; // ausgeben
        
        return 0;
    }
    Also hier ebenfalls wieder mit Char gelöst

    Eigentlich wollte ich gerade noch eine andere Möglichkeit (Spielerei mit EOF) beschreiben, aber nachdem ich eine halbe Stunde ausprobiert habe, mit dem Ergebnis, dass sie nicht funktioniert, schreibe ich sie nicht mehr (was ein Satz) .


    Edit: Noch ne blöde Idee: Einfach die Zahl in ein int-Array speichern. Allerdings in den "ASCII Werten". Jede Stelle hat also einen Index. In diesem Index steht dann die entsprechende ASCII Zahl , die die Stelle darstellt.

    Bei 01 steht dann da also Folgendes:

    data[0] = 48;
    data[1] = 49;

    Dann musst du später die verschiedenen "Array-Indexe" nacheinander ausgeben.
    Aber so natürlich, dass das ASCII Zeichen dargestellt wird. Also: cout<<(char)data[index];

    Ich hoffe, dass dir meine zweite sinnvolle (sinnvoll deswegen, weil ich schon gerade mehrere Unsinnige hatte ) Idee helfen kann .


    Gruß -DoS

    P.S. Ja ja, C++ Stil ich weiß... xD
    Geändert von DoS (11.03.2010 um 16:02 Uhr)
    Legende: "Gruß" = kaum Zeit, "MfG." = durchschnittlich viel Zeit und "Mit freundlichen Grüßen" = viel Zeit
    gehabt beim Posten.


    Folgende Personen genießen meine Hochschätzung: BlackBerry, EBFE, DizzY_D, OpCodez, l0dsb und H4x0r007.

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •