E
BasicMan01 schrieb:
Wo ist in deiner OrderArr-Funktion die benutzte Variable "p_var" deklariert?
Wo ist das geforderte return?
Jo, war etwas chaotisch. Habs jetzt verbessert und läuft, Danke für die Hilfe.
BasicMan01 schrieb:
bin jetzt net der Pro in C, aber der Code erscheint mir undurchsichtig.
- Zeile 35:
- ab Zeile 55:
if(p_var->anzahl<10)
printf(" %d\t\t",p_var->anzahl);
else if(p_var->anzahl<100)
printf(" %d\t\t",p_var->anzahl);
else
printf("%d\t\t",p_var->anzahl);
// vielleicht doch lieber so:
printf("%4d\t\t",p_var->anzahl);
Um die Sachen von irgendeiner Variablen in eine andere zu bekommen, empfehle ich erstmal das simple "wert-fuer-wert-kopieren"
Arr1[0].anzahl = p_var->anzahl;
Arr1[0].preis = p_var->preis;
// und im naechsten Schleifendurchlauf
Arr1[1].anzahl = p_var->anzahl;
Arr1[1].preis = p_var->preis;
Danke auch für die Hilfe, habs jetzt so gemacht und hinbekommen. Die Zeile 35 war in der Tat unsinn :). Ab Zeile 55 ist aber mMn schon wichtig, da es die ausgabe des Preises rechtsbündig formatiert und man die einzelnen Preise sonst nicht vernünftig und übersichtlich vergleichen kann. Falls es euch interessiert hier der Quellcode:
#include <stdio.h>
#include "lagdat.h"
#define MAX 100
struct artikel_t var, *p_var;
int OrderArr();
void OrderList();
void OrderSort();
void main(void)
{
struct artikel_t Arr[MAX];
int anz=0,i=0,j=0, orderanz=0;
float aku=0;
p_var=&var;
printf("Lagerverwaltung Drogerie \n\n");
if(openLager()==0)
printf("Status:\tDatei erfolgreich geladen!\n\n\n");
else
printf("Status:\tFehler beim Laden der Datei!\n\n\n");
printf("Lfd.Nr. Art.Nr Artikel\t\t\tLagerbestand\tPreis\t\tGesamt\n");
printf("--------------------------------------------------------------------------------");
while(readNext( p_var)!=-1)
{
anz++;
printf("%d\t%d\t", anz,p_var->artnr);
i=0;
while(p_var->bezeichner[i]!='\0')
{
printf("%c",p_var->bezeichner[i]);
i++;
}
if(i<8)
printf("\t\t");
else
printf("\t");
aku = aku + p_var->anzahl*p_var->preis;
printf("\t%d",p_var->anzahl);
//Preis rechts formatieren
if(p_var->preis<10)
printf("\t\t %.2f\t",p_var->preis);
else if(p_var->preis<100)
printf("\t\t%.2f\t",p_var->preis);
//Gesamtpreis rechts formatieren
if(p_var->preis*p_var->anzahl<10)
printf("\t %.2f",p_var->preis*p_var->anzahl);
else if(p_var->preis*p_var->anzahl<100)
printf("\t %.2f",p_var->preis*p_var->anzahl);
else if(p_var->preis*p_var->anzahl<1000)
printf("\t %.2f",p_var->preis*p_var->anzahl);
else
printf("\t%.2f",p_var->preis*p_var->anzahl);
printf("\n");
}
printf("--------------------------------------------------------------------------------\n");
printf("\t\t\t\t\t\t\tSumme:\t %.2f\n\n", aku);
orderanz = OrderArr(&Arr, MAX);
OrderList(&Arr, orderanz);
OrderSort(&Arr, orderanz);
}
int OrderArr(struct artikel_t Arr[] , int anz )
{
struct artikel_t orderList;
int data=0, datacheck=0, k=0;
datacheck=openLager();
data = readNext (&orderList);
while(data!=-1)
{
if(orderList.anzahl < orderList.min)
{
Arr[k] = orderList;
k++;
}
data = readNext(&orderList);
}
return k;
}
void OrderList(struct artikel_t Arr[] , int orderanz)
{
int i=0, j=0;
float aku=0;
printf("Bestellliste:\n\n");
printf("Lfd.Nr. Art.Nr Artikel\t\t\tBestellmenge\tPreis\t\tGesamt\n");
printf("--------------------------------------------------------------------------------");
for(i=0;i<orderanz;i++)
{
aku = aku + Arr[i].anzahl*Arr[i].preis;
printf("%d\t",i+1);
printf("%d\t",Arr[i].artnr);
while(Arr[i].bezeichner[j]!='\0')
{
printf("%c",Arr[i].bezeichner[j]);
j++;
}
if(j<8)
printf("\t\t\t");
else
printf("\t\t");
j=0;
printf("%d\t\t",4*Arr[i].min-Arr[i].anzahl);
//Preis rechts formatieren
if(p_var->preis<10)
printf(" %.2f\t\t",Arr[i].preis);
else if(p_var->preis<100)
printf("%.2f\t\t",Arr[i].preis);
//Gesamtpreis rechts formatieren
if(Arr[i].anzahl*Arr[i].preis<10)
printf(" %.2f\n",Arr[i].anzahl*Arr[i].preis);
else if(Arr[i].anzahl*Arr[i].preis<100)
printf(" %.2f\n",Arr[i].anzahl*Arr[i].preis);
else if(Arr[i].anzahl*Arr[i].preis<1000)
printf(" %.2f\n",Arr[i].anzahl*Arr[i].preis);
else
printf("%.2f\n",Arr[i].anzahl*Arr[i].preis);
}
printf("--------------------------------------------------------------------------------\n");
printf("\t\t\t\t\t\t\tSumme:\t %.2f\n\n", aku);
}
void OrderSort(struct artikel_t Arr[] , int orderanz)
{
int i=0, j=0;
float aku=0;
struct artikel_t hilf;
for(i=orderanz-1; i>0; i--)
{
for (j=0; j<i; j++)
{
if (Arr[j].artnr>Arr[j+1].artnr)
{
hilf = Arr[j];
Arr[j] = Arr[j+1];
Arr[j+1] = hilf;
}
}
}
j=0;
printf("Bestellliste(nach Art.Nr):\n\n");
printf("Lfd.Nr. Art.Nr Artikel\t\t\tBestellmenge\tPreis\t\tGesamt\n");
printf("--------------------------------------------------------------------------------");
for(i=0;i<orderanz;i++)
{
aku = aku + Arr[i].anzahl*Arr[i].preis;
printf("%d\t",i+1);
printf("%d\t",Arr[i].artnr);
while(Arr[i].bezeichner[j]!='\0')
{
printf("%c",Arr[i].bezeichner[j]);
j++;
}
if(j<8)
printf("\t\t\t");
else
printf("\t\t");
j=0;
printf("%d\t\t",4*Arr[i].min-Arr[i].anzahl);
//Preis rechts formatieren
if(p_var->preis<10)
printf(" %.2f\t\t",Arr[i].preis);
else if(p_var->preis<100)
printf("%.2f\t\t",Arr[i].preis);
//Gesamtpreis rechts formatieren
if(Arr[i].anzahl*Arr[i].preis<10)
printf(" %.2f\n",Arr[i].anzahl*Arr[i].preis);
else if(Arr[i].anzahl*Arr[i].preis<100)
printf(" %.2f\n",Arr[i].anzahl*Arr[i].preis);
else if(Arr[i].anzahl*Arr[i].preis<1000)
printf(" %.2f\n",Arr[i].anzahl*Arr[i].preis);
else
printf("%.2f\n",Arr[i].anzahl*Arr[i].preis);
}
printf("--------------------------------------------------------------------------------\n");
printf("\t\t\t\t\t\t\tSumme:\t %.2f\n\n\n", aku);
}
Danke nochmal an alle die mir geholfen haben
Mal noch eine kleine Frage am Rande: Mein Programm läuft jetzt zwar, allerdings würde ich gerne den Code der Funktion OrderList reduzieren, weil die ja bis auf das Sortieren des Arrays das gleiche macht wie OrderList. Ich hab einfach folgendes ausprobiert:
void OrderSort(struct artikel_t Arr[] , int orderanz)
{
int i=0, j=0;
float aku=0;
struct artikel_t hilf;
for(i=orderanz-1; i>0; i--)
{
for (j=0; j<i; j++)
{
if (Arr[j].artnr>Arr[j+1].artnr)
{
hilf = Arr[j];
Arr[j] = Arr[j+1];
Arr[j+1] = hilf;
}
}
}
j=0;
OrderList();
}
Das hat aber nicht funktioniert. Der Compiler meldett zwar keinen Fehler, aber die Ausgabe spuckt nur noch Buchstabensuppe aus. Warum funktioniert das nicht, eigentlich müsste sich die Funktion doch problemlos aufrufen lassen, oder?