HILFE!!! Strukturen und Dateien



  • PAD schrieb:

    Ein paar Anmerkungen neben her,
    -Warum definiertst du die Struct zweimal?
    ...

    Du vermeidest damit das du bei der Änderung des Deklaration eine deiner Routinen vergisst und dann Blödsinn passiert.

    Danke dafür, da lag nämlich ein Fehler. Ich hatte etwas geändert, aber nur bei der Structur die zum Einlesen da war... darum kam bei der Ausgabe eben nur Blödsinn.

    Und wegen der Datei, die habe ich #define(d) 😃 Das Programm braucht nicht alle Eventualitäten kennen, darum habe ich die Prüfung, ob die Datei da ist, bzw. beschrieben werden kann weggelassen. Ich gehe davon aus, dass sie immer beschrieben werden kann, und dass sie da ist. Alles andere behandeln wir erst im nächsten Semester 😃

    MfG,
    xaser



  • MFK schrieb:

    xaser schrieb:

    wenn ich dann aber eine 8 stellige artikelnummer eingebe,
    ...
    char artnr[LARTNR]; // LARTNR = 8

    In artnr passt keine achtstellige Artikelnummer. Du musst den Platz für das Stringendezeichen berücksichtigen.

    danke. das habe ich mir auch schon gedacht... da die letzte stelle die endekennung sein muss. ich überprüfe jetzt einfach wie viele stellen eingegeben wurden und wenns zuviele sind hau ich die 0 manuell ans ende, und dann ist schicht im schacht!

    MfG,
    xaser



  • wenn die artikelnummer nur aus zahlen besteht dann nimm doch 'int' oder sowas, keine zeichenketten



  • net schrieb:

    wenn die artikelnummer nur aus zahlen besteht dann nimm doch 'int' oder sowas, keine zeichenketten

    mit int kann ich aber keine artikelnummern bilden die z.b. 00012345 sind.

    MfG,
    xaser



  • xaser schrieb:

    net schrieb:

    wenn die artikelnummer nur aus zahlen besteht dann nimm doch 'int' oder sowas, keine zeichenketten

    mit int kann ich aber keine artikelnummern bilden die z.b. 00012345 sind.

    klar, kannst ja bei der ausgabe nullen davor schreiben. nur mit buchstaben wirds schwer, obwohl, da kann man bestimmt was mit atoi/xtoa machen.



  • net schrieb:

    xaser schrieb:

    net schrieb:

    wenn die artikelnummer nur aus zahlen besteht dann nimm doch 'int' oder sowas, keine zeichenketten

    mit int kann ich aber keine artikelnummern bilden die z.b. 00012345 sind.

    klar, kannst ja bei der ausgabe nullen davor schreiben. nur mit buchstaben wirds schwer, obwohl, da kann man bestimmt was mit atoi/xtoa machen.

    uuuu... das wird mir zuviel. dafür habe ich keine Zeit. ich muss in 38 stunden fertig sein, und dann reicht es dass es so einfach wie möglich läuft.

    MfG,
    xaser



  • falsch er kann die 0 nicht einfach auffüllen. Es kann ohne weiteres sein das die Artikelnummer 000123 einen anderen Artikel beschreibt wie 123 oder 0123. Dieser Fall ist so bescheuert wie er ist leider möglich.

    Auffüllen mit führenden Nullen geht bei printf mir "%05i" zum Beispile die vorangestellte 0 vor der 5 sagt aus das die leeren Stellen vorne mit 0 aufgefüllt werden bis es fünf sind

    printf ("ASDF:%5i",23);  //=> "ASDF:   23"
    printf ("ASDF:%05i",23); //=> "ASDF:00023"
    

    Ich benutze immer folgende Schreibweise, gerade in der Ausbildung unsere Praktikanten, dmait ihnen die Stelle für den Endekennzung nicht vergessen wird.

    char bez[LBEZ+1];
    


  • PAD schrieb:

    Auffüllen mit führenden Nullen geht bei printf mir "%05i" zum Beispile die vorangestellte 0 vor der 5 sagt aus das die leeren Stellen vorne mit 0 aufgefüllt werden bis es fünf sind

    printf ("ASDF:%5i",23);  //=> "ASDF:   23"
    printf ("ASDF:%05i",23); //=> "ASDF:00023"
    

    astrein, funktioniert echt super, danke sehr... und wieder was dazugelernt.
    jetzt ist meine artikelnummer ein unsigned int... mit aufgefüllten nullen.
    dabei nehme ich aber an, dass die artikelnummer 001 und 01 und 1 alle das gleiche sind... so weit treibe ich das spiel dann doch nicht 😉

    gibts da auch ne möglichkeit zum beispiel bei einem string die hinteren stellen aufzufüllen?

    also printf("%15s",hersteller); würde 15 stellen für den hersteller reservieren, der name steht aber hinten. ich möchte das aber umdrehen, dass der string vorne ausgegeben wird, und dann die restlichen stellen bis 15 hinten aufgefüllt werden. das ist für die tabellendarstellung besser.

    MfG,
    xaser



  • Die normale Antwort wäre jetzt "Schau mal ins Handbuch"
    Du findest diese Informationen in jedem Handbuch oder Online Hilfe typischerweise beim printf statemant als Formatoptionen

    Aber dein ZeitConstraint ist angekommen:

    printf("]%10s[\n","Peter");      //--> ]     Peter[
    printf("]%-10s[\n","Peter");     //--> ]Peter     [
    

    Quelle:
    http://www.schellong.de/c.htm#function

    format:  [[...][arg_ident][...]]...  (Zeichenkette)
    
    Argument-Identifizierer:
    
    %[flags][min_breite][.präzision][längen_mod]konv_spez
       -      *            *          hh         d i
       +      dez_zahl     dez_zahl    h         u
      leerz                            l         o
       #                              ll         x X
       0                               L         f F
                                       j         e E
                                       z         g G
                                       t         a A
                                                 c
                                                 s
                                                 p
                                                 n
                                                 %
    
    %%     Erzeugt 1 Zeichen %
    [...]  Optional
    *      Info aus zusätzlichem Int-Arg,
           Angabe(n) vor dem eigentlichen Arg.
    *      min_breite: neg. Int-Arg-Wert entspricht '-'flag
    
            Darstellung   Arg-Typ        hh h  l  ll L  j  z  t
    C99                                  .        .     .  .  .
    d i     [-]Dezimal    +/-Integer     *  *  *  *     i  s  p
    u       Dezimal       us-Integer     *  *  *  *     i  s  p
    o       Oktal         Integer        *  *  *  *     i  s  p
    x X     Hexadezmal    Integer        *  *  *  *     i  s  p
    f F     123.456789    Gleitkomma                 *
    e E     123.45e-12    Gleitkomma                 *
    g G     fF¦eE         Gleitkomma                 *
    a A     Hexadez(C99)  Gleitkomma                 *
    c       Zeichen       Integer/'x'          wi
    s       Zeichenkette  char*                wc
    p       Hex(meist)    void*
    n       nZeichen-->   &int           *  *  *  *     i  s  p
    
                                         i:[u]intmax_t  s:size_t
                                         p:ptrdiff_t
                                         wi:wint_t      wc:wchar_t
            hh: [unsigned] char
             h: [unsigned] short
             l: [unsigned] long
            ll: [unsigned] long long
             L: long double
    
    Flags
    -       Linksbündig innerhalb Ausgabe-Breite
    +       +           vor Darstellung bei pos. Arg-Wert
    leerz   Leerzeichen vor Darstellung bei pos. Arg-Wert
    #       0x¦0X  vor Hex-Darstellung, 0  vor Oktal-Darst.
    #       .  ist stets vorhanden bei Gleitkomma
    0       Breite wird mit führenden Nullen 0 aufgefüllt
            anstatt mit Leerzeichen.
    
    präzision:
    Mindestanzahl Ziffern bei diuoxX.
    Ziffern nach  .  bei  fFeEaA.
    Maximalanzahl signifikante Ziffern bei  gG.
    Maximalanzahl Zeichen bei  s.
    

    Hab bei der Gelegenheit auch wieder was über die Formatoptionen gelernt



  • vielen dank 🙂

    das hilft mir wirklich sehr!
    und danke dass du meine zeitknappheit berücksichtigst.

    ich muss echt noch viel machen. aus der liste die ich erstelle müssen auch artikel gelöscht werden können, ich will sie sortieren können, und ändern...
    es ist noch viel zu schreiben und zu testen... ich hoffe dass meine finger nicht anfangen zu glühen.

    MfG,
    xaser


Anmelden zum Antworten