19chris88 Geschrieben 18. Dezember 2010 Geschrieben 18. Dezember 2010 Hallo, ich soll das programm... so umschrieben das es mit dynamischen arrays arbeitet und in eine datei ausgegeben wird. habe erstmal mit sizeof probiert, value_char = malloc(anzahl*sizeof(char)); aber hab jetzt keine ahnung wie ich weiter machen muss erstmal das programm #include <stdio.h> #include <stdlib.h> struct artikel{ char artikle_n[50]; //Artikelname mit max. 50 Zeichen double artikel_nr; //Artikelnummer double artikel_p; //Artikelpreis double artikel_m; //Menge des vorhandenen Artikels }a[100]; int main(){ char *value_char; int anzahl, i; double mwst, gesamtpreis, mwstanteil, gesamtwert=0, gesamt=0; printf("\n ----------> WARENLAGER <---------- \n"); printf("\n Eingabe der einzelnen Artikel!! \n\n"); printf(" Wie viele Artikel wollen Sie eingeben? "); scanf(" %d",&anzahl); //Anzahl wie oft die Schleife durchlaufen werden soll value_char = malloc(anzahl*sizeof(char)); printf("\n Sie geben jetzt %d Artikel ein.\n",anzahl); for(i = 0; i < anzahl; i++){ printf("\n %d. Artikel",i+1); while(getchar() != '\n'); printf("\n Artikelname: "); //Eingabe des Artikelnamen fgets(a[i].artikle_n, 50, stdin); sscanf(a[i].artikle_n, "%s", &a[i].artikle_n); printf("\n Artikelnummer: "); //Eingabe der Artiklenummer scanf(" %lf",&a[i].artikel_nr); printf("\n Preis: "); //Eingabe des Preises scanf(" %lf",&a[i].artikel_p); printf("\n Menge: "); //Eingabe der Menge scanf(" %lf",&a[i].artikel_m); } printf(""); printf("\n ----------> Uebersicht des Warenbestandes <----------"); printf("\n Eingabe des Mehrwertsteuersatzes( in Prozent): "); scanf(" %lf",&mwst); // Eingabe der MwSt printf("\n\n Artikelname Artikelnr. Preis Menge Gesamtpreis MwSt-Anteil \n"); printf(" _____________________________________________________________________________\n"); for(i=0; i< anzahl; i++){ printf(" %s ",a[i].artikle_n); printf(" %10.0lf",a[i].artikel_nr); printf(" %12.2lf",a[i].artikel_p); printf(" %12.0lf",a[i].artikel_m); gesamtpreis = a[i].artikel_p*a[i].artikel_m; // Gesamtpreis ist Artikelpreis mal Menge printf(" %12.2lf",gesamtpreis); mwstanteil=((mwst/100)*gesamtpreis); // MwSt-Anteil ist die MwSt durch 100 und das ganze mal Gesamtpreis printf(" %12.2lf\n", mwstanteil); gesamtwert+=gesamtpreis+mwstanteil; gesamt+=gesamtpreis; } printf("\n\n Gesamtwert: %.2lf\n", gesamtwert); printf("\n Gesamtwert (ohne MwSt): %.2lf\n\n", gesamt); system("pause"); return 0; } vielleicht kann mir einer sagen wie ich weiter machen muss bzw. was ich umschreiben muss. danke Zitieren
unbenannt Geschrieben 18. Dezember 2010 Geschrieben 18. Dezember 2010 Definiere bitte "dynamisches Array". Wenn ich das lese, assoziiere ich damit immer ein selbstständig wachsendes bzw. schrumpfendes Array. Das ist in C natürlich nicht möglich. value_char = malloc(anzahl*sizeof(char)); Spontan geschätzt: Du möchtest keinen Speicherbereich für ein Char-Array alloziieren. Wahrscheinlich möchtest Du eher ein Array des Typs "struct artikel" erzeugen. Aktuell wird ein solches, 100-elementiges, fest auf dem Stack erzeugt. Sollte doch noch etwas Dynamik erforderlich sein (sollte das Array wachsen müssen), so ist "realloc" Dein Freund. Und niemals vergessen: alloziierter Speicher muss auch wieder freigegeben werden Zitieren
laubi Geschrieben 26. Dezember 2010 Geschrieben 26. Dezember 2010 value_char = (char*)malloc(anzahl*sizeof(char)); ich habe mir den code durchgesehen, aber für was brauchst du bitte das value_char? das kommt nur bei char *value_char; vor und beim assoziieren... also sinnlos Oo achja, ich gebe dir folgenden tipp: mach die Struktur so: struct artikel { [INDENT]char artikelname[50]; int artikelnummer; int anzahl; float preis;[/INDENT] }; noch schöner währe char *artikelname; , nur muss dann bei jeder eingabe dann auch speicher reserviert werden (und wieder freigegeben mit free() weiters die variable nicht global deklarieren, das ist nicht schön^^ hoffe ich konnte ein wenig helfen. lg Laubi Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.