Verfügbare Informationen zu "Versuch 5 - funktioniert nicht"
Qualität des Beitrags: 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:17Versuch 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:48Veruch5, 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)
