Versuch 5 - funktioniert nicht

Elektrotechnik-Forum
Verfügbare Informationen zu "Versuch 5 - funktioniert nicht"

  • Qualität des Beitrags: 0 Sterne
  • Beteiligte Poster: louis - wolfi
  • Forum: Elektrotechnik-Forum
  • Forenbeschreibung: Hilfsmittel für das Studium
  • aus dem Unterforum: Programmieren
  • Antworten: 2
  • Forum gestartet am: Dienstag 18.05.2004
  • Sprache: deutsch
  • Link zum Originaltopic: Versuch 5 - funktioniert nicht
  • Letzte Antwort: vor 18 Jahren, 9 Monaten, 4 Tagen, 13 Stunden, 53 Minuten
  • Alle Beiträge und Antworten zu "Versuch 5 - funktioniert nicht"

    Re: Versuch 5 - funktioniert nicht

    louis - 07.06.2004, 18:17

    Versuch 5 - funktioniert nicht
    #ifdef HAVE_CONFIG_H
    #include <config.h>
    #endif

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "bsod.h"


    /* Struktur der Listenelemente */


    struct elem_t
    {
    struct elem_t* next;
    double messwert;
    };


    struct elem_t* ListEin(struct elem_t* pw, double dwert);
    struct elem_t* ShowNext(struct elem_t* wurzel, struct elem_t* aktpos);
    int ShowList(struct elem_t* aktpos);
    void FreeMem(struct elem_t* wurzel);

    int main()
    {
    int iEingabe;
    struct elem_t* wurzel = NULL;
    struct elem_t* aktpos = wurzel;
    double dMesswert=0.0;
    double dAktwert=0.0;
    char cTemp='0';

    printf("5. Uebung in \"Programmieren 1\" \n");
    printf("by Thomas Laur\n\n");

    do
    {

    printf("Letzter Wert: %.2f Leseposition: %.2f\n\n", dMesswert, dAktwert);
    printf(" (1) Neuen Wert einlesen (2) Naechsten Wert einlesen\n");
    printf(" (3) Wert korrigieren (4) Werte ausgeben\n");
    printf(" (5) Liste entfernen (E) Exit\n\n");
    printf("Eingabe: ");
    iEingabe = toupper(getchar());




    // fflush(stdin);


    switch(iEingabe)
    {
    case '1': printf("Neuen Wert eingeben : ");
    scanf("%lf",&dMesswert);
    wurzel = aktpos = ListEin(wurzel,dMesswert) ;
    if(wurzel == NULL)
    return EXIT_FAILURE;
    break;

    case '2': aktpos = ShowNext(wurzel, aktpos);
    dAktwert = aktpos->messwert;
    break;

    case '3': printf("alt: %0.2lf Neu ? : ",aktpos->messwert);
    scanf("%lf",&aktpos->messwert);
    dAktwert = aktpos->messwert;
    dMesswert = wurzel->messwert;
    break;

    case '4': ShowList(aktpos);
    break;

    case '5': FreeMem(wurzel);
    break;

    // case 0x65:
    // case 0x45: return 0;
    }

    // Eigabepuffer leeren mit Hilfsvariablen cTemp
    while(cTemp != '\n')
    cTemp=getchar();
    cTemp='0';
    }
    while(iEingabe != 'E');


    return EXIT_SUCCESS;
    }


    struct elem_t* ListEin(struct elem_t* pw, double dwert)
    {
    struct elem_t* new;

    new = malloc(sizeof(struct elem_t));

    if(new == NULL)
    {
    Fehler("kein Speicherplatz mehr frei\n\n");
    return NULL;
    }
    new->next = pw;
    new->messwert = dwert;

    return new;
    }

    struct elem_t* ShowNext(struct elem_t* wurzel, struct elem_t* aktpos)
    {
    aktpos = aktpos->next;
    if(aktpos == 0x0)
    aktpos = wurzel;
    return aktpos;
    }

    int ShowList(struct elem_t* aktpos)
    {
    //Listenkopf
    printf("\nMesswertliste\n");
    printf("===================\n\n");

    // gibt jeden einzelnen Listeneintrag aus
    while(aktpos->next != NULL)
    {
    printf("%.2lf\n",aktpos->messwert);
    aktpos=aktpos->next;
    }
    // Letzter Wert ausgeben, da er sonst nicht ausgegeben wird
    printf("%.2lf\n",aktpos->messwert);
    printf("\n===================\n\n");
    return 0;
    }

    void FreeMem(struct elem_t* wurzel)
    {
    struct elem_t* pfirst;
    struct elem_t* psecond;

    pfirst=wurzel;

    while(psecond->next != NULL)
    {
    printf("%.2lf wird geloescht\n",pfirst->messwert);
    psecond=pfirst->next;
    free(pfirst);
    pfirst=psecond;
    }
    printf("%.2lf wird geloescht\n",pfirst->messwert);
    free(pfirst);
    printf("Liste gelöscht\n");
    }



    Re: Versuch 5 - funktioniert nicht

    wolfi - 21.06.2004, 15:48

    Veruch5, der funktioniert.
    #include <stdio.h>


    typedef struct elem_t
    {
    struct elem_t* next;
    double messwert;
    } element;

    //functions in current module

    /************************************************************

    this function adds a new element previous to an
    existing list or create the first list entry.

    function values are:
    pref, pointer to first entry
    dvalue, value which has to be stored

    return value:
    pnew_ref, pointer to current entry

    **************************************************************/
    element* ListEin(element* pref, double dvalue)
    {
    element* pnew_ref; //new reference pointer

    pnew_ref=(element*)malloc(sizeof(element));
    pnew_ref->messwert=dvalue;
    if(NULL==pref)
    pnew_ref->next=NULL;
    else
    pnew_ref->next=pref;

    return pnew_ref;
    }

    /************************************************************

    This function returns the pointer to the next entry from
    an existing list. If current entry is the last, a rollover
    takes place and the first entry will be showed.

    function values are:
    pref, pointer to first entry
    pcurr, pointer to current entry

    return value:
    pnew_curr, pointer to next entry

    **************************************************************/
    element* ShowNext(element* pref, element* pcurr)
    {
    element* pnew_curr; //pointer to new current element

    if(NULL!=pcurr->next)
    pnew_curr=pcurr->next;
    else
    pnew_curr=pref;

    return pnew_curr;
    }

    /************************************************************

    This function edit a list entry in an
    existing list or return an error.

    function values are:
    pcurr, pointer to current entry

    return value:
    0, if current value has changed
    -1, if no current value exists

    **************************************************************/
    int EditCurr(element* pcurr)
    {
    if(NULL!=pcurr)
    {
    printf("Aktueller Wert: %lf\n",pcurr->messwert);
    printf("neuen Wert eingeben\n");
    fflush(stdin);
    scanf("%lf",&pcurr->messwert);
    return 0;
    }
    else
    return -1;
    }

    /************************************************************

    This function show all entrys (from current to last) of
    an existing list.If current entry is the last no entrys
    will be showed.

    function value is:
    pcurr, pointer to current entry

    return value:
    0, if values are showed
    -1, if no list is present

    **************************************************************/
    int SchowRest(element* pcurr)
    {
    element* pnew_curr;

    if(NULL!=pcurr)
    {
    pnew_curr=pcurr;
    while(NULL!=pnew_curr)
    {
    printf("%lf\n",pnew_curr->messwert);
    pnew_curr=pnew_curr->next;
    }
    return 0;
    }
    else
    return -1;
    }

    /*************************************************************

    This function removes the list from memory

    function value:
    pref, pointer to first entry

    return values:
    0, if list has been removed
    -1, if no list exists

    **************************************************************/
    int FreeMem(element* pref)
    {
    element* pref_hlp;
    if(NULL!=pref)
    {
    do
    {
    pref_hlp=pref->next;
    free(pref);
    pref=pref_hlp;
    }while(NULL!=pref_hlp);
    return 0;
    }
    else
    return -1;
    }

    /*************************************************************

    main program

    **************************************************************/
    int main (void)
    {
    char input;
    char error1[]="kein Wert vorhanden!";
    char error2[]="keine Liste vorhanden!";
    double dWert=0;
    element* pWurzel=NULL;
    element* pAktpos=NULL;

    //Menu display
    do
    {
    //clar screen

    //display current values
    if(NULL!=pWurzel)
    printf("Letzter Wert:\t%f\t\t\tLeseposition:\t%f\n\n",pWurzel->messwert,pAktpos->messwert);
    else
    printf("Letzter Wert: %s\tLeseposition: %s\n\n",error1,error1);
    //display selection field
    printf("(1) Neuen Wert eingeben\t\t\t(2) Naechsten Wert anzeigen\n"
    "(3) Wert korrigieren\t\t\t(4) Werte ausgeben\n"
    "(5) Liste entfernen\t\t\t(E) Exit\n");
    //read in selection
    fflush(stdin);
    scanf("%c",&input);
    switch (input)
    {
    case '1':
    printf("geben Sie einen Wert ein.\n");
    fflush(stdin);
    scanf("%lf",&dWert);
    pWurzel=ListEin(pWurzel,dWert);
    if(NULL==pAktpos)
    pAktpos=pWurzel;
    break;

    case '2':
    pAktpos=ShowNext(pWurzel,pAktpos);
    break;

    case '3':
    if(-1==EditCurr(pAktpos))
    printf("%s\n",error2);
    break;

    case '4':
    if(-1==SchowRest(pAktpos))
    printf("%s\n", error2);
    break;

    case '5':
    if(0==FreeMem(pWurzel))
    {
    printf("Liste geloescht\n");
    pWurzel=pAktpos=NULL;
    }
    else
    printf("%s\n",error2);
    break;
    }

    }while('E'!=input);
    return 0;
    }



    Mit folgendem Code, können Sie den Beitrag ganz bequem auf ihrer Homepage verlinken



    Weitere Beiträge aus dem Forum Elektrotechnik-Forum



    Ähnliche Beiträge wie "Versuch 5 - funktioniert nicht"

    wiiki - ein versuch - dejost (Montag 29.01.2007)
    Zahlenkette (1.Versuch) - trunks (Mittwoch 20.06.2007)
    Missglückter Versuch - Aloc Acoc (Dienstag 26.12.2006)
    wie funktioniert eigentlich... - Freundschaft (Sonntag 22.10.2006)
    Ich starte einen neuen Versuch - Angelika (Montag 27.11.2006)
    Montagne et Pays Plat - Delicious (Sonntag 27.07.2008)
    Wie funktioniert denn das posten... - chäschpu (Freitag 17.08.2007)
    Badehosen - Tilli (Sonntag 15.02.2009)
    2 Versuch - Maria (Dienstag 06.02.2007)
    Dritter Versuch macht kluch - Aal-Manni (Mittwoch 15.11.2006)