manny
18-05-2003, 13:38
hallo zusammen. ich hab hier ein kleinen c-programm das nicht richtig arbeitet. es geht um doppeltverkettete listen. (lifo-stack)
ein uni-prof soll studenten zu klausuren anmelden.
bitte nicht über sinn und unsinn dieses programms philosophieren. es ist eine übungsaufgabe.
also:
main (); funzt !
anmelde (); funzt !
zeige (); funzt !
schreibe (); funzt nicht.
mein problem ist diese zeile:
fprintf (fp, "%d %d %s\n", (zeiger->matrikel), (zeiger->telefon), (zeiger->email));
das programm compiliert, aber wenn ich beim ausführen in diese zeile komme, bekomme ich eine "Fault-Access"-Fehlermeldung und das programm stürzt ab.
lasse ich zeiger->email weg, also:
fprintf (fp, "%d %d\n", (zeiger->matrikel), (zeiger->telefon));
läuft es zwar ohne absturz, aber dann steht in zeiger->telefon eine falsche information :(
bitte helfen =)
#include <stdio.h>
#include <stdlib.h>
#include <conio.h> // Borland C suxx
#include <string.h>
// Datenstruktur
typedef struct listElem {
double matrikel;
double telefon;
char email[30];
struct listElem *next;
struct listElem *prev;
} t_listElem;
// Es ist nur eine Liste vorhanden
t_listElem *anfang, *ende;
// Prototypen
void init ();
void lade ();
void schreibe ();
void anmelde ();
void abmelde ();
void zeige ();
void main ()
{
init ();
int eingabe;
clrscr ();
printf ("Autor: Clemens Kalbfuss SS03 Prog2-Praktikum Aufgabe 9\n");
printf ("LIFO-Stack doppeltverkettet\n\n");
printf ("\nHAUPTMENU\n1. Lade Daten\n2. Anmelden\n3. Zeige Liste\n4. Abmelden\n5. Speichere Daten\n0. Ende\n");
scanf ("%d",&eingabe);
while (eingabe)
{
switch (eingabe) {
case 1: break;
case 2: anmelde ();
break;
case 3: zeige ();
break;
case 4: break;
case 5: schreibe ();
break;
case 0: break;
default: printf ("\nFehler bei der Auswahl.\n");
printf ("\n\nPress any key to exit...");
getch ();
break;
} // end of switch
clrscr ();
printf ("Autor: Clemens Kalbfuss SS03 Prog2-Praktikum Aufgabe 9\n");
printf ("LIFO-Stack doppeltverkettet\n\n");
printf ("\nHAUPTMENU\n1. Lade Daten\n2. Anmelden\n3. Zeige Liste\n4. Abmelden\n5. Speichere Daten\n0. Ende\n");
scanf ("%d",&eingabe);
}
printf ("\n\nPress any key to exit...");
getch ();
} // end of main ()
void init ()
{
anfang = NULL;
ende = NULL;
}
void schreibe ()
{
FILE *fp;
char dateiname[20];
t_listElem *zeiger = anfang;
printf ("In welche Datei speichern ? ");
scanf ("%s", dateiname);
if ((fp = fopen (dateiname, "w")) != NULL)
{
if (anfang == NULL)
{
fprintf (fp, "Keine Anmeldungen");
} else
while (zeiger != NULL)
{
fprintf (fp, "%d %d %s\n", (zeiger->matrikel), (zeiger->telefon), (zeiger->email));
zeiger = zeiger->next;
}
} else
printf ("\nFehler beim Oeffnen der Datei !");
fclose (fp);
} // end of schreibe
void anmelde ()
{
double matrikel, telefon;
char email[30];
t_listElem *neu;
neu = (t_listElem *) malloc (sizeof(t_listElem));
if (neu != NULL)
{
printf ("Geben Sie ihre Matrikelnummer an: ");
scanf ("%d", &matrikel);
printf ("Geben Sie ihre Telefonnummer an: ");
scanf ("%d", &telefon);
printf ("Geben Sie ihre E-Mail an: ");
scanf ("%s", email);
neu->matrikel = matrikel;
neu->telefon = telefon;
strcpy (neu->email, email);
neu->prev = NULL;
neu->next = NULL;
if (anfang == NULL)
{
anfang = neu;
ende = neu;
} else
{
ende->next = neu;
neu->prev = ende;
ende = neu;
}
} else printf ("Fehler in anmelde() bei malloc");
} // end of anmelde
void zeige ()
{
t_listElem *zeiger = anfang;
if (anfang == NULL)
{
printf ("\nKeine Eintraege vorhanden !\n");
} else
{
printf ("Angemeldete Studenten:\n");
while (zeiger != NULL)
{
printf ("\nMatrikelnummer: %d\n", zeiger->matrikel);
printf ("Telefonnummer: %d\n", zeiger->telefon);
printf ("E-Mail: %s\n", zeiger->email);
zeiger = zeiger->next;
}
}
printf ("\n\nPress any key to continue...");
getch ();
} // end of zeige ();
ein uni-prof soll studenten zu klausuren anmelden.
bitte nicht über sinn und unsinn dieses programms philosophieren. es ist eine übungsaufgabe.
also:
main (); funzt !
anmelde (); funzt !
zeige (); funzt !
schreibe (); funzt nicht.
mein problem ist diese zeile:
fprintf (fp, "%d %d %s\n", (zeiger->matrikel), (zeiger->telefon), (zeiger->email));
das programm compiliert, aber wenn ich beim ausführen in diese zeile komme, bekomme ich eine "Fault-Access"-Fehlermeldung und das programm stürzt ab.
lasse ich zeiger->email weg, also:
fprintf (fp, "%d %d\n", (zeiger->matrikel), (zeiger->telefon));
läuft es zwar ohne absturz, aber dann steht in zeiger->telefon eine falsche information :(
bitte helfen =)
#include <stdio.h>
#include <stdlib.h>
#include <conio.h> // Borland C suxx
#include <string.h>
// Datenstruktur
typedef struct listElem {
double matrikel;
double telefon;
char email[30];
struct listElem *next;
struct listElem *prev;
} t_listElem;
// Es ist nur eine Liste vorhanden
t_listElem *anfang, *ende;
// Prototypen
void init ();
void lade ();
void schreibe ();
void anmelde ();
void abmelde ();
void zeige ();
void main ()
{
init ();
int eingabe;
clrscr ();
printf ("Autor: Clemens Kalbfuss SS03 Prog2-Praktikum Aufgabe 9\n");
printf ("LIFO-Stack doppeltverkettet\n\n");
printf ("\nHAUPTMENU\n1. Lade Daten\n2. Anmelden\n3. Zeige Liste\n4. Abmelden\n5. Speichere Daten\n0. Ende\n");
scanf ("%d",&eingabe);
while (eingabe)
{
switch (eingabe) {
case 1: break;
case 2: anmelde ();
break;
case 3: zeige ();
break;
case 4: break;
case 5: schreibe ();
break;
case 0: break;
default: printf ("\nFehler bei der Auswahl.\n");
printf ("\n\nPress any key to exit...");
getch ();
break;
} // end of switch
clrscr ();
printf ("Autor: Clemens Kalbfuss SS03 Prog2-Praktikum Aufgabe 9\n");
printf ("LIFO-Stack doppeltverkettet\n\n");
printf ("\nHAUPTMENU\n1. Lade Daten\n2. Anmelden\n3. Zeige Liste\n4. Abmelden\n5. Speichere Daten\n0. Ende\n");
scanf ("%d",&eingabe);
}
printf ("\n\nPress any key to exit...");
getch ();
} // end of main ()
void init ()
{
anfang = NULL;
ende = NULL;
}
void schreibe ()
{
FILE *fp;
char dateiname[20];
t_listElem *zeiger = anfang;
printf ("In welche Datei speichern ? ");
scanf ("%s", dateiname);
if ((fp = fopen (dateiname, "w")) != NULL)
{
if (anfang == NULL)
{
fprintf (fp, "Keine Anmeldungen");
} else
while (zeiger != NULL)
{
fprintf (fp, "%d %d %s\n", (zeiger->matrikel), (zeiger->telefon), (zeiger->email));
zeiger = zeiger->next;
}
} else
printf ("\nFehler beim Oeffnen der Datei !");
fclose (fp);
} // end of schreibe
void anmelde ()
{
double matrikel, telefon;
char email[30];
t_listElem *neu;
neu = (t_listElem *) malloc (sizeof(t_listElem));
if (neu != NULL)
{
printf ("Geben Sie ihre Matrikelnummer an: ");
scanf ("%d", &matrikel);
printf ("Geben Sie ihre Telefonnummer an: ");
scanf ("%d", &telefon);
printf ("Geben Sie ihre E-Mail an: ");
scanf ("%s", email);
neu->matrikel = matrikel;
neu->telefon = telefon;
strcpy (neu->email, email);
neu->prev = NULL;
neu->next = NULL;
if (anfang == NULL)
{
anfang = neu;
ende = neu;
} else
{
ende->next = neu;
neu->prev = ende;
ende = neu;
}
} else printf ("Fehler in anmelde() bei malloc");
} // end of anmelde
void zeige ()
{
t_listElem *zeiger = anfang;
if (anfang == NULL)
{
printf ("\nKeine Eintraege vorhanden !\n");
} else
{
printf ("Angemeldete Studenten:\n");
while (zeiger != NULL)
{
printf ("\nMatrikelnummer: %d\n", zeiger->matrikel);
printf ("Telefonnummer: %d\n", zeiger->telefon);
printf ("E-Mail: %s\n", zeiger->email);
zeiger = zeiger->next;
}
}
printf ("\n\nPress any key to continue...");
getch ();
} // end of zeige ();