Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

dynamische array

Empfohlene Antworten

Veröffentlicht

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

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 ;)


    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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.