Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Lösung ohne Rekursion

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
04.11.2004, 13:28 Uhr
~c noooooob
Gast


Guten Tag,

eine Funktion, die Daten in ein Struct einließt soll so geändert werden, dass es ohne die Rekursion funktioniert.
Die Funktion sieht folgendermaßen aus:


C++:
KONTAKTDATEN* eingabe () {    //Funktion zum Einlesen der Daten

KONTAKTDATEN *a = NULL;
static char neu;
static int schleife = 0;

a = (KONTAKTDATEN*) malloc(sizeof(KONTAKTDATEN));
a->next = NULL;

fflush(stdin);

printf("Bitte Nachname eingeben\n");
gets (a->name);

printf("Bitte Vorname eingeben\n");
gets (a->vorname);

printf("Bitte Telefon-Nummer eingeben\n");
gets (a->ecom.telefon);

int datensatz = schleife +1;

printf("\n\nSie haben %d/20 Datensaetzen eingelesen.\nWeiteren Datensatz einlesen? <j> / <n>\n",datensatz);
scanf("%c",&neu);
printf("\n");

if ((neu != 'n') && (schleife < 19)) {

    schleife++;
    a->next = eingabe();
}



Es wäre nett wenn mir jemand sagen könnte wie ich das realisieren kann...
Vielen Dank!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
04.11.2004, 13:37 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


indem du eine schleife zum einlesen verwendest

rekursion läuft i.a. immer so ab das du eine abbruchbedinugen hast und so lange die nicht erfüllt ist ruft sich die funktion selbst auf...

wenn du das nicht rekursiv machen willst musst du die abbruchbedingung halt nicht in einen If-abfrage packen sondern in eine schleife...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
04.11.2004, 13:59 Uhr
~c noooooob
Gast


Hallo Windalf,

habe ich auch schon versucht, aber ich mache da irgend etwas grundlegendes Falsch!
Wenn ich es so wie unten aufgeführt mache kann ich zwar mehrere Datensätze eingeben, aber es wird nur einer Ausgegeben.


C++:
KONTAKTDATEN* eingabe () {    //Funktion zum Einlesen der Daten

char neu;
KONTAKTDATEN *a = NULL;

while (neu != 'n') {

static int schleife = 0;

a = (KONTAKTDATEN*) malloc(sizeof(KONTAKTDATEN));
a->next = NULL;

fflush(stdin);

printf("Bitte Nachname eingeben\n");
gets (a->name);

printf("Bitte Vorname eingeben\n");
gets (a->vorname);

printf("Bitte Telefon-Nummer eingeben\n");
gets (a->ecom.telefon);

static int datensatz = 0;
datensatz++;

printf("\n\nSie haben %d/20 Datensaetzen eingelesen.\nWeiteren Datensatz einlesen? <j> / <n>\n",datensatz);
scanf("%c",&neu);
printf("\n");

a->next ++;

}

return a;

}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
04.11.2004, 14:32 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


also ne idee wäre es z.b. ne extrafunktion zu schreiben die ein datensatz einliest...
und diese rufst du dann immer in ner schleife auf so lange derjenige kein n eingibt...

auch musst du die zählervariable nicht static machen, ist ziemlich unnötig...

auf die schnell so in der art... sind bestimmt noch einige fehler drin hab nur schnell copy und paste gemacht...


C++:

void eingabe(KONTAKTDATEN *kd){ //oder eventeuell so ausbauen das noch fehler bei der eingabe abgefangen werden und nen rückgabewert ausgewertet werden kann

printf("Bitte Nachname eingeben\n");
gets (kd->name); //vorsicht bei gets... eventuell lieber fgets verweden aber ist ja erstmal egal

printf("Bitte Vorname eingeben\n");
gets (kd->vorname);

printf("Bitte Telefon-Nummer eingeben\n");
gets (kd->ecom.telefon);



}

int main(){

char neu='j';
int i;

KONTAKTDATEN  *a,*kdliste;

a=kdliste=NULL;

for(i=0;char!='n';++i){
a = (KONTAKTDATEN*) malloc(sizeof(KONTAKTDATEN));
if(!i)kdliste=a;
a->next = NULL;
eingabe(a);
a=a->next;

printf("\n\nSie haben %d/20 Datensaetzen eingelesen.\nWeiteren Datensatz einlesen? <j> / <n>\n",i+1);
scanf("%c",&neu);
printf("\n");

}

}







--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 04.11.2004 um 14:33 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
04.11.2004, 14:52 Uhr
~c noooooob
Gast


Vielen Dank!

Ich werde dann mal versuchen ein wenig "rumzubasteln".
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: