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 = 8In 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 nichtgibts 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 FormatoptionenAber dein ZeitConstraint ist angekommen:
printf("]%10s[\n","Peter"); //--> ] Peter[ printf("]%-10s[\n","Peter"); //--> ]Peter [
Quelle:
http://www.schellong.de/c.htm#functionformat: [[...][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