HILFE beim Telefonverzeichnis



  • Hallo geschätztes C Forum.
    Ich habe ein kleines Telefonbuch in C programmiert in dem man Teilnehmer ein- ausgeben und suchen kann. Ich komme da an einigen Stellen nicht weiter!
    Die Navigation läuft soweit schon ganz gut.
    Die eingegebenen Teilnehmer werden in einem Textdoc. abgespeichert.
    1. Die Ausgabe selbiger soll in tabellarischer Form erfolgen.(Zeile 233) An dem Punkt zerschießt mir das Programm die Tabelle. WARUM? 😮
    2. Die Suchkunktion (Zeile 281)läuft aus mir unersichtlichen Gründen nicht richtig. Durch strcmp soll das Programm die Bestehende Teilnehmerliste mit einem Stichwort vergleichen. Tut es aber nicht.WARUM?? 😡
    Vieleicht Baum vor lauter Wald nicht aber ich strick jetzt seit ner Woche daran rum. Mein Compiler ist der Borland 5.02.
    Würde mich echt super freuen, wenn mir da jemand weiterhelfen könnte!!Danke...
    Hier mal der Code:

    #include <stdio.h>
    #include <conio.h>          //laden von Bibliotheken die benötigt werden
    #include <stdlib.h>
    #include <string.h>
    
    struct daten					// Datenstruktur festlegen
    {
    	char name[20];
    	char vorname[15];      //zu strukturierende Daten...
    	char email[30];        //...mit fest vorgeschriebener Zeichenanzahl
    	int nummer;
    	char stichwort[31];
    } liste[100];		//legt 100 Datensätze mit Namen "Liste" maximal
    
    int i = 1, x;                   //dekl.einer Variablen i mit Wertzuweisung(Definition) 1 und...
    			      //..einer Var. x ohne Wert
    
    void menue();
    void eingabe();             //anmelden aller Unterfunktionen des Progamms
    void ausgabe();
    void suchen();
    void beenden();
    
    void main()                 //Hauptfunktion
    {
    	int x;
    	FILE *zeiger;
    	zeiger = fopen("a:\liste.txt", "r");		//öffnen der Datensätze zum lesen
    	if (zeiger != NULL)
    	{
    		if(feof(zeiger) == 0)                 //prüfen ob der Dateizeiger am Ende der Datei steht
    		{
    			fscanf(zeiger,"%i","&i");			//liest Anzahl der Datensätze
    			for(x=0; x<=i && feof(zeiger)==0; x=x+1)   //wenn gilt dass beide Bedingungen zutreffen(wahr sind)
    						     //1.Bed.:Var x=0 xgrößergleich i UND...
    						     //2.Bed.:Zeiger am Ende der Datei
    			{
    				fscanf (zeiger,"%s",&liste[x].name);            //Anweisung was gelesen werden soll
    				fscanf (zeiger,"%s",&liste[x].vorname);
    				fscanf (zeiger,"%d",&liste[x].nummer);
    				fscanf (zeiger,"%s",&liste[x].email);
    			}
    		}
    		fclose(zeiger);
    	}
    	for(;;)		//FOR-Schleife ohne Abbruchbedingung - Endlosschleife
    		menue();
    }
    
    void menue()                    //1.Unterfunktion
    {
    	clrscr();
    	gotoxy(1,5);
    	printf ("                  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
    	printf ("                  X                                        X\n");
    	printf ("                  X        Online-Telefonverzeichnis       X\n");
    	printf ("                  X----------------------------------------X\n");
    	printf ("                  X                                        X\n");
    	printf ("                  X         Bitte waehlen Sie:             X\n");
    	printf ("                  X       -----------------------          X\n");
    	printf ("                  X                                        X\n");
    	printf ("                  X        1 Teilnehmer eingeben           X\n");
    	printf ("                  X                                        X\n");
    	printf ("                  X        2 Teilnehmer ausgeben           X\n");
    	printf ("                  X                                        X\n");
    	printf ("                  X        3 Teilnehmer suchen             X\n");
    	printf ("                  X                                        X\n");
    	printf ("                  X        4 Programm beenden              X\n");
    	printf ("                  X                                        X\n");
    	printf ("                  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
    
    	char a;
    	a = getch();
    	switch(a)                              //Anweisung für Tastatureingaben oder Menü-Auswahl
    	{
    		case '1' : eingabe(); break;          // case block:
    		case '2' : ausgabe(); break;          //Zuweisung bestimmter Tasten zu den jeweiligen Unterprogrammen
    		case '3' : suchen(); break;           //break Anweisung beendet einen case Block
    		case '4' : beenden(); break;          //
    		default  : menue();                   // wenn alle case Blöcke nicht zutreffen...
    						  //...RÜcksprung ins Hauptmenue
    	}
    }
    
    void eingabe()           //2.Unterfunktion
    {
    	i++;			//Nr. des Datensatzes der eingegeben wird erhöht sich um 1
    	do				//führe aus
    	{
    		clrscr();
    		gotoxy(1,3);
    		printf ("          XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
    		printf ("          X                                        X\n");
    		printf ("          X    Bitte geben Sie Ihre Daten ein      X\n");
    		printf ("          X----------------------------------------X\n");
    		printf ("          X                                        X\n");
    		printf ("          X  Name   :                              X\n");
    		printf ("          X                                        X\n");
    		printf ("          X  Vorname:                              X\n");
    		printf ("          X                                        X\n");
    		printf ("          X  Nummer :                              X\n");
    		printf ("          X                                        X\n");
    		printf ("          X  Email  :                              X\n");
    		printf ("          X                                        X\n");
    		printf ("          XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
    
    		gotoxy(26,8);
    		scanf("%s",liste[i].name);
    
    		while(strlen(liste[i].name)>20)            //liefert die Anzahl der Buchstaben der Zeichenkette name zurück
    		{
    			gotoxy(0,23);
    
    			printf ("!!!Bitte nicht mehr als 20 Zeichen eingeben!!!\n");
    			printf ("!!!Bitte Eingabe wiederholen						 \n");
    
    			gotoxy(26,8);
    			scanf("%s",liste[i].name);
    		}
    
    		gotoxy(26,10);
    		scanf("%s",liste[i].vorname);
    
    		while(strlen(liste[i].vorname)>20)            //liefert die Anzahl der Buchstaben der Zeichenkette vorname zurück
    		{
    			gotoxy(0,23);
    
    			printf ("!!!Bitte nicht mehr als 15 Zeichen eingeben!!!\n");
    			printf ("!!!Bitte Eingabe wiederholen						 \n");
    			printf ("\t\t\t                                        \n");
    			gotoxy(26,10);
    			scanf("%s",liste[i].vorname);
    		}
    		gotoxy(26,12);
    		scanf("%i",&liste[i].nummer);
    
    		while(liste[i].nummer>9999)
    		{
    			gotoxy(0,23);
    			printf ("!!!Bitte nicht mehr als 10 Zeichen eingeben!!!\n");
    			printf ("!!!Bitte Eingabe wiederholen						 \n");
    			printf ("\t\t\t                                        \n");
    			gotoxy(26,12);
    			scanf("%i",liste[i].nummer);
    		}
    
    		gotoxy(26,14);
    		scanf("%s",liste[i].email);
    
    		while(strlen(liste[i].email)>30)             //strlen liefert die Anzahl der Buchstaben der Zeichenkette email zurück
    		{                                            //wenn Anzahl höher als vordefiniert dann erneute Eingabe
    			gotoxy(0,23);
    
    			printf ("!!!Bitte nicht mehr als 30 Zeichen eingeben!!!\n");
    			printf ("!!!Bitte Eingabe wiederholen						 \n");
    			printf ("\t\t\t                                        \n");
    			gotoxy(26,17);
    			scanf("%s",liste[i].name);
    		}
    		gotoxy(0,23);
    		printf ("\t\t                                           \n");
    		printf ("                                          \n");
    
    		gotoxy(0,23);
    		printf ("\n\n\tMoechten Sie die Eingaben aendern?  (j/n)     \n");
    	}
    	while(getch()=='j'); 			//wenn ja - erneute Eingabe
    
    	FILE *zeiger;
    	zeiger=fopen("a:\liste.txt","w");		//öffnen der Datensätze zum schreiben
    	if (zeiger != NULL)
    	{
    		fprintf(zeiger,"%i\n",i);       //schreibt die Anzahl der Datensätze in die "Liste"
    		for (x=0;x<=i;x=x+1)
    		{
    			fprintf (zeiger,"%s",&liste[x].name);
    			fprintf (zeiger,"%s",&liste[x].vorname);
    			fprintf (zeiger,"%i",&liste[x].nummer);
    			fprintf (zeiger,"%s",&liste[x].email);
    		}
    		fclose(zeiger);
    	}
    	else
    	{
    		printf ("Programm konnte Ihre Daten nicht speichern...");
    		getch();
    	}
    	printf ("\n\n\tDaten wurden erfolgreich gespeichert!\n");
    	printf ("\n\n\Druecken Sie eine belibige Taste um ins Hauptmenue zurueckzukehren\n");
    	getch();
    }
    
    void ausgabe()					//3.Unterprogramm
    {
    	int n;
    	clrscr();
    	printf ("                        Telefonliste:               \n");
    	printf ("          XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
    	printf ("           Name           Vorname                    Nummer              Email                     \n");
    	for(n=0;n<=i;n=n+1)
    	{
    		printf ("         %s             %s                        %d                  %s               \n",liste[n].name,liste[n].vorname,liste[n].nummer,liste[n].email);
    	}
    	       //	printf("Name		:%s\n",liste[n].name);
    	    //printf("Vorname	:%s\n",liste[n].vorname);
    	    //printf("Nummer		:%d\n",liste[n].nummer);
    	    //printf("Email		:%s\n",liste[n].email);
    	    //printf ("          XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
    
    	printf ("\n\n\n");
    	printf ("Bitte druecken Sie `h` um ins Hauptmenue zurueckzukehren\n");
    	while(getch()!='h')			//Schleife solange andere Taste als hgedrückt wird
    	printf ("Bitte druecken Sie `h` um ins Hauptmenue zurueckzukehren\n");
    	getch();
    }
    
    void suchen()
    {
    	char stichwort[31];
    	clrscr();
    	gotoxy(16,12);
    	printf ("\n\t\t               Namen suchen\n");
    	printf ("\n\t\t     Bitte geben Sie ein Stichwort ein:\n");
    	gotoxy(35,17);
    	scanf("%s",stichwort);
    
    	char b,n;
    	//clrscr();
    	//printf ("\t\t\nNamen mit gesuchtem Stichwort:\n\n\n");
    	//printf ("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
    
    	//printf("%s",liste[n].name);
    	//printf("%s",liste[n].stichwort);
    	if (strcmp(liste[n].name,stichwort) == 0)    //vergleicht die Eingabe mit den Einträgen aus den Datensätzen
    	{
    		{
    			clrscr();
    			printf ("                        Suchergebnis:              \n");
    			printf ("          XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
    			printf ("           Name           Vorname                    Nummer              Email                     \n");
    			for(n=0;n<=i;n=n+1);
    			{
    
    				printf ("         %s             %s                        %d                  %s               \n",liste[n].name,liste[n].vorname,liste[n].nummer,liste[n].email);
    
    				b++;
    
    	       //	printf("Name		:%s\n",liste[n].name);
    	  //  printf("Vorname	:%s\n",liste[n].vorname);
    	    //printf("Nummer		:%i\n",liste[n].nummer);
    	    //printf("Email		:%s\n",liste[n].email);
    	    //printf ("          XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
    
    			}                                               //Eingegebener Datensatz wird um 1 erhöht
    		}
    	}
    	if (b==0)
    	{
    		printf ("\nTeilnehmer nicht vorhanden!\n");
    		printf ("\nDuecken Sie eine beliebige Taste um ins Hauptmenue zu gelangen\n");
    		getch();
    	}
    	else
    	{
    		printf ("\nDuecken Sie eine beliebige Taste um ins Hauptmenue zu gelangen\n");
    		getch();
    	}
    }
    
    void beenden()
    {
    	clrscr();
    	gotoxy(16,12);
    	printf ("\t\tSie haben das Programm beendet.\a\n");
    	gotoxy(16,14);
    	printf ("\t\t  (beliebige Taste druecken)\n");
    	getch();
    	exit(0);
    }
    

    Edit by c.rackwitz:
    - [code] Tags
    - ein Bisschen Einrueckung... oder auch etwas mehr!



  • Formatierung angepasst ...

    #include <stdio.h>
    #include <conio.h> //laden von Bibliotheken die benötigt werden
    #include <stdlib.h>
    #include <string.h>
    
    struct daten // Datenstruktur festlegen
    
    {
    	char name[20];
    	char vorname[15]; //zu strukturierende Daten...
    	char email[30]; //...mit fest vorgeschriebener Zeichenanzahl
    	int nummer;
    	char stichwort[31];
    } liste[100]; //legt 100 Datensätze mit Namen "Liste" maximal
    
    int i=1,x; //dekl.einer Variablen i mit Wertzuweisung(Definition) 1 und...
    //..einer Var. x ohne Wert
    
    void menue();
    void eingabe(); //anmelden aller Unterfunktionen des Progamms
    void ausgabe();
    void suchen();
    void beenden();
    
    void main() //Hauptfunktion
    
    {
    
    	int x;
    	FILE *zeiger;
    	zeiger=fopen("a:\liste.txt","r"); //öffnen der Datensätze zum lesen
    	if (zeiger != NULL)
    	{
    		if(feof(zeiger)==0) //prüfen ob der Dateizeiger am Ende der Datei steht
    
    		{
    			fscanf(zeiger,"%i","&i"); //liest Anzahl der Datensätze
    			for(x=0;x<=i && feof(zeiger)==0;x=x+1) //wenn gilt dass beide Bedingungen zutreffen(wahr sind)
    				//1.Bed.:Var x=0 xgrößergleich i UND...
    				//2.Bed.:Zeiger am Ende der Datei
    			{
    				fscanf (zeiger,"%s",&liste[x].name); //Anweisung was gelesen werden soll
    				fscanf (zeiger,"%s",&liste[x].vorname);
    				fscanf (zeiger,"%d",&liste[x].nummer);
    				fscanf (zeiger,"%s",&liste[x].email);
    			}
    
    		}
    
    		fclose(zeiger);
    	}
    
    	for(;;) //FOR-Schleife ohne Abbruchbedingung - Endlosschleife
    		menue();
    }
    
    void menue() //1.Unterfunktion
    {
    	clrscr();
    	gotoxy(1,5);
    	printf (" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
    	printf (" X X\n");
    	printf (" X Online-Telefonverzeichnis X\n");
    	printf (" X----------------------------------------X\n");
    	printf (" X X\n");
    	printf (" X Bitte waehlen Sie: X\n");
    	printf (" X ----------------------- X\n");
    	printf (" X X\n");
    	printf (" X 1 Teilnehmer eingeben X\n");
    	printf (" X X\n");
    	printf (" X 2 Teilnehmer ausgeben X\n");
    	printf (" X X\n");
    	printf (" X 3 Teilnehmer suchen X\n");
    	printf (" X X\n");
    	printf (" X 4 Programm beenden X\n");
    	printf (" X X\n");
    	printf (" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
    
    	char a;
    	a = getch();
    	switch(a) //Anweisung für Tastatureingaben oder Menü-Auswahl
    	{
    
    	case '1' : eingabe(); break; // case block:
    	case '2' : ausgabe(); break; //Zuweisung bestimmter Tasten zu den jeweiligen Unterprogrammen
    	case '3' : suchen(); break; //break Anweisung beendet einen case Block
    	case '4' : beenden(); break; //
    	default : menue(); // wenn alle case Blöcke nicht zutreffen...
    		//...RÜcksprung ins Hauptmenue
    
    	}
    
    }
    
    void eingabe() //2.Unterfunktion
    
    {
    
    	i++; //Nr. des Datensatzes der eingegeben wird erhöht sich um 1
    
    	do //führe aus
    
    	{
    
    		clrscr();
    		gotoxy(1,3);
    		printf (" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
    		printf (" X X\n");
    		printf (" X Bitte geben Sie Ihre Daten ein X\n");
    		printf (" X----------------------------------------X\n");
    		printf (" X X\n");
    		printf (" X Name : X\n");
    		printf (" X X\n");
    		printf (" X Vorname: X\n");
    		printf (" X X\n");
    		printf (" X Nummer : X\n");
    		printf (" X X\n");
    		printf (" X Email : X\n");
    		printf (" X X\n");
    		printf (" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
    
    		gotoxy(26,8);
    		scanf("%s",liste[i].name);
    
    		while(strlen(liste[i].name)>20) //liefert die Anzahl der Buchstaben der Zeichenkette name zurück
    		{
    
    			gotoxy(0,23);
    
    			printf ("!!!Bitte nicht mehr als 20 Zeichen eingeben!!!\n");
    			printf ("!!!Bitte Eingabe wiederholen \n");
    
    			gotoxy(26,8);
    			scanf("%s",liste[i].name);
    		}
    
    		gotoxy(26,10);
    		scanf("%s",liste[i].vorname);
    
    		while(strlen(liste[i].vorname)>20) //liefert die Anzahl der Buchstaben der Zeichenkette vorname zurück
    		{
    
    			gotoxy(0,23);
    
    			printf ("!!!Bitte nicht mehr als 15 Zeichen eingeben!!!\n");
    			printf ("!!!Bitte Eingabe wiederholen \n");
    			printf ("\t\t\t \n");
    			gotoxy(26,10);
    			scanf("%s",liste[i].vorname);
    		}
    
    		gotoxy(26,12);
    		scanf("%i",&liste[i].nummer);
    
    		while(liste[i].nummer>9999)
    		{
    
    			gotoxy(0,23);
    
    			printf ("!!!Bitte nicht mehr als 10 Zeichen eingeben!!!\n");
    			printf ("!!!Bitte Eingabe wiederholen \n");
    			printf ("\t\t\t \n");
    			gotoxy(26,12);
    			scanf("%i",liste[i].nummer);
    		}
    
    		gotoxy(26,14);
    		scanf("%s",liste[i].email);
    
    		while(strlen(liste[i].email)>30) //strlen liefert die Anzahl der Buchstaben der Zeichenkette email zurück
    		{ //wenn Anzahl höher als vordefiniert dann erneute Eingabe
    
    			gotoxy(0,23);
    
    			printf ("!!!Bitte nicht mehr als 30 Zeichen eingeben!!!\n");
    			printf ("!!!Bitte Eingabe wiederholen \n");
    			printf ("\t\t\t \n");
    			gotoxy(26,17);
    			scanf("%s",liste[i].name);
    		}
    
    		gotoxy(0,23);
    		printf ("\t\t \n");
    		printf (" \n");
    
    		gotoxy(0,23);
    		printf ("\n\n\tMoechten Sie die Eingaben aendern? (j/n) \n");
    	}
    
    	while(getch()=='j'); //wenn ja - erneute Eingabe
    
    	FILE *zeiger;
    	zeiger=fopen("a:\liste.txt","w"); //öffnen der Datensätze zum schreiben
    	if (zeiger != NULL)
    	{
    
    		fprintf(zeiger,"%i\n",i); //schreibt die Anzahl der Datensätze in die "Liste"
    		for (x=0;x<=i;x=x+1)
    
    		{
    
    			fprintf (zeiger,"%s",&liste[x].name);
    			fprintf (zeiger,"%s",&liste[x].vorname);
    			fprintf (zeiger,"%i",&liste[x].nummer);
    			fprintf (zeiger,"%s",&liste[x].email);
    		}
    		fclose(zeiger);
    
    	}
    	else
    	{
    		printf ("Programm konnte Ihre Daten nicht speichern...");
    		getch();
    	}
    	printf ("\n\n\tDaten wurden erfolgreich gespeichert!\n");
    	printf ("\n\n\Druecken Sie eine belibige Taste um ins Hauptmenue zurueckzukehren\n");
    	getch();
    }
    
    void ausgabe() //3.Unterprogramm
    
    {
    	int n;
    	clrscr();
    	printf (" Telefonliste: \n");
    	printf (" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
    	printf (" Name Vorname Nummer Email \n");
    	for(n=0;n<=i;n=n+1)
    	{
    		printf (" %s %s %d %s \n",liste[n].name,liste[n].vorname,liste[n].nummer,liste[n].email);
    
    	}
    
    	// printf("Name :%s\n",liste[n].name);
    	//printf("Vorname :%s\n",liste[n].vorname);
    	//printf("Nummer :%d\n",liste[n].nummer);
    	//printf("Email :%s\n",liste[n].email);
    	//printf (" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
    
    	printf ("\n\n\n");
    	printf ("Bitte druecken Sie `h` um ins Hauptmenue zurueckzukehren\n");
    	while(getch()!='h') //Schleife solange andere Taste als hgedrückt wird
    		printf ("Bitte druecken Sie `h` um ins Hauptmenue zurueckzukehren\n");
    	getch();
    }
    
    void suchen()
    {
    	char stichwort[31];
    	clrscr();
    	gotoxy(16,12);
    	printf ("\n\t\t Namen suchen\n");
    	printf ("\n\t\t Bitte geben Sie ein Stichwort ein:\n");
    	gotoxy(35,17);
    	scanf("%s",stichwort);
    
    	char b,n;
    	//clrscr();
    	//printf ("\t\t\nNamen mit gesuchtem Stichwort:\n\n\n");
    	//printf ("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
    
    	//printf("%s",liste[n].name);
    	//printf("%s",liste[n].stichwort);
    	if (strcmp(liste[n].name,stichwort) == 0) //vergleicht die Eingabe mit den Einträgen aus den Datensätzen
    
    	{
    
    		{
    			clrscr();
    			printf (" Suchergebnis: \n");
    			printf (" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
    			printf (" Name Vorname Nummer Email \n");
    			for(n=0;n<=i;n=n+1);
    			{
    
    				printf (" %s %s %d %s \n",liste[n].name,liste[n].vorname,liste[n].nummer,liste[n].email);
    
    				b++;
    
    				// printf("Name :%s\n",liste[n].name);
    				// printf("Vorname :%s\n",liste[n].vorname);
    				//printf("Nummer :%i\n",liste[n].nummer);
    				//printf("Email :%s\n",liste[n].email);
    				//printf (" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
    
    			} //Eingegebener Datensatz wird um 1 erhöht
    
    		}
    	}
    
    	if (b==0)
    
    	{
    		printf ("\nTeilnehmer nicht vorhanden!\n");
    		printf ("\nDuecken Sie eine beliebige Taste um ins Hauptmenue zu gelangen\n");
    		getch();
    	}
    	else
    	{
    		printf ("\nDuecken Sie eine beliebige Taste um ins Hauptmenue zu gelangen\n");
    		getch();
    	}
    
    }
    
    void beenden()
    
    {
    	clrscr();
    	gotoxy(16,12);
    	printf ("\t\tSie haben das Programm beendet.\a\n");
    	gotoxy(16,14);
    	printf ("\t\t (beliebige Taste druecken)\n");
    	getch();
    	exit(0);
    }
    


  • also zunächst würde ich alle scanf und fscanf durch fgets ersetzen. mit scanf kannst du doch arge probleme bekommen.

    Wenn ich mir deine SuFu anschaue, kann das doch gar net funktionieren.

    char b,n;
        //clrscr();
        //printf ("\t\t\nNamen mit gesuchtem Stichwort:\n\n\n");
        //printf ("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
    
        //printf("%s",liste[n].name);
        //printf("%s",liste[n].stichwort);
        if (strcmp(liste[n].name,stichwort) == 0)
    

    Du verwendest n in einem nicht definiertem Zustand. Du müsstest hier schon durch eine Schleife laufen oder den Parameter der Funktion übergeben.

    An und für sich scheint mir das ganze Programm sehr unübersichtlich



  • achso: bei der ausgabe zerschießt dir dein Programm bestimmt, weil der index nicht passt.

    Hast du die ausgelesenen Daten mal gecheckt?



  • Off Topic: Ist das nen Schulprojekt? sowas in der Art musste ich auch mal machen..



  • ja die ausgelesenen Daten sind total in der Wurst.Tipps von anderen laien waren, dass ich das ganze einfach mit fread und fwrite binär speichern soll. Hab ich auch gemacht nur da funktionierte zum Schluss gar nichts mehr.

    Was bedeutet denn das der Index nicht passt? Das Prog. legt doch die .txt Datei in der die Datensätze gelesen und geschrieben werden ganz allein an?

    JA und natürlich ist es ein verdammtes SCHULPROJEKT und der Dozent ist ein tierischer Korintenkacker!!! 😉



  • noch ne Frage:

    In Unterfunktion 3 (ausgabe)des Programms benutze ich

    printf ("\n\n\n");
    printf ("Bitte druecken Sie `h` um ins Hauptmenue zurueckzukehren\n");
    while(getch()!='h')

    Warum muß ich ´h´ zweimal drücken bis der Rüchsprung erfolgt??



  • in deinem programm steckt an mehreren stellen der wurm:

    fscanf(zeiger,"%i","&i"); //liest Anzahl der Datensätze
    

    du hast den letzten parameter versehentlich in anführungszeichen gesetzt.

    bei der variablen i machst du auch einen fehler. wenn du i zum programmstart auf 1 setzt und zu beginn von eingabe() i inkrementierst, dann wird der erste datensatz imm array an der indexposition 2 geschrieben anstatt an der stelle 0. du mußt i zum programmstart auf null setzten und in der funktion eingabe() i am ende inkrementieren. in anderen worten: i sollte die anzahl der im array gespeicherten datensätze enthalten. bei den for-schleifen mußt du dann aber

    for (x=0; x<i; x=x+1)
    

    anstelle von

    for (x=0; x=<i; x=x+1)
    

    schreiben.

    in der funktion suchen() hast du dich total verhaspelt 😃 da hast du das

    if (strcmp(liste[n].name,stichwort) == 0) //vergleicht die Eingabe mit 
    den Einträgen aus den Datensätzen
    

    außerhalb statt innerhalb der for-schleife stehen!

    zu der frage, warum 'h' zweimal eingegeben werden muß: du hast hinter while(getch()!='h'); noch ein getch() stehen. wenn du das entfernst, dann sollte es funktionieren.



  • Ja - vielen vielen Dank für die hilfreichen Tipps. Habe die Fehler korregiert und bin dadurch ein kleines Stück weiter gekommen. Leider funzt die Ausgabe der Datensätze immer noch nicht. Selbst unter berücksichtigung des NULL-Bytes bei der Ausgabe. Nun stoppt das Prog. mit "access violation at 0x4017af...
    Die .txt Datei wird nach wie vor nicht richtig gespeichert.
    Ich weiß - es nervt, aber für Rat und Tat werde ich ewig dankbar sein!!!
    Hier nochmal der Code:

    #include <stdio.h>
    #include <conio.h> //laden von Bibliotheken die benötigt werden
    #include <stdlib.h>
    #include <string.h>

    struct daten // Datenstruktur festlegen

    {
    char name[20];
    char vorname[15]; //zu strukturierende Daten...
    char email[30]; //...mit fest vorgeschriebener Zeichenanzahl
    int nummer;
    char stichwort[31];
    } liste[100]; //legt 100 Datensätze mit Namen "Liste" maximal

    int i=0,x; //dekl.einer Variablen i mit Wertzuweisung(Definition) 1 und...
    //..einer Var. x ohne Wert

    void menue();
    void eingabe(); //anmelden aller Unterfunktionen des Progamms
    void ausgabe();
    void suchen();
    void beenden();

    void main() //Hauptfunktion

    {

    int x;
    FILE *zeiger;
    zeiger=fopen("a:\liste.txt","r"); //öffnen der Datensätze zum lesen
    if (zeiger != NULL)
    {
    if(feof(zeiger)==0) //prüfen ob der Dateizeiger am Ende der Datei steht

    {
    fscanf(zeiger,"%i",&i); //liest Anzahl der Datensätze
    for(x=0;x<=i && feof(zeiger)==0;x=x+1) //wenn gilt dass beide Bedingungen zutreffen(wahr sind)
    //1.Bed.:Var x=0 xgrößergleich i UND...
    //2.Bed.:Zeiger am Ende der Datei
    {
    fscanf (zeiger,"%s",&liste[x].name); //Anweisung was gelesen werden soll
    fscanf (zeiger,"%s",&liste[x].vorname);
    fscanf (zeiger,"%i",&liste[x].nummer);
    fscanf (zeiger,"%s",&liste[x].email);
    }

    }

    fclose(zeiger);
    }

    for(;;) //FOR-Schleife ohne Abbruchbedingung - Endlosschleife
    menue();
    }

    void menue() //1.Unterfunktion
    {
    clrscr();
    gotoxy(1,5);
    printf (" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
    printf (" X X\n");
    printf (" X Online-Telefonverzeichnis X\n");
    printf (" X----------------------------------------X\n");
    printf (" X X\n");
    printf (" X Bitte waehlen Sie: X\n");
    printf (" X ----------------------- X\n");
    printf (" X X\n");
    printf (" X 1 Teilnehmer eingeben X\n");
    printf (" X X\n");
    printf (" X 2 Teilnehmer ausgeben X\n");
    printf (" X X\n");
    printf (" X 3 Teilnehmer suchen X\n");
    printf (" X X\n");
    printf (" X 4 Programm beenden X\n");
    printf (" X X\n");
    printf (" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");

    char a;
    a = getch();
    switch(a) //Anweisung für Tastatureingaben oder Menü-Auswahl
    {

    case '1' : eingabe(); break; // case block:
    case '2' : ausgabe(); break; //Zuweisung bestimmter Tasten zu den jeweiligen Unterprogrammen
    case '3' : suchen(); break; //break Anweisung beendet einen case Block
    case '4' : beenden(); break; //
    default : menue(); // wenn alle case Blöcke nicht zutreffen...
    //...RÜcksprung ins Hauptmenue

    }

    }

    void eingabe() //2.Unterfunktion

    {

    do //führe aus

    {

    clrscr();
    gotoxy(1,3);
    printf (" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
    printf (" X X\n");
    printf (" X Bitte geben Sie Ihre Daten ein X\n");
    printf (" X----------------------------------------X\n");
    printf (" X X\n");
    printf (" X Name : X\n");
    printf (" X X\n");
    printf (" X Vorname: X\n");
    printf (" X X\n");
    printf (" X Nummer : X\n");
    printf (" X X\n");
    printf (" X Email : X\n");
    printf (" X X\n");
    printf (" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");

    gotoxy(26,8);
    scanf("%s",liste[i].name);

    while(strlen(liste[i].name)>20) //liefert die Anzahl der Buchstaben der Zeichenkette name zurück
    {

    gotoxy(0,23);

    printf ("!!!Bitte nicht mehr als 20 Zeichen eingeben!!!\n");
    printf ("!!!Bitte Eingabe wiederholen \n");

    gotoxy(26,8);
    scanf("%s",liste[i].name);
    }
    i++; //Nr. des Datensatzes der eingegeben wird erhöht sich um 1

    gotoxy(26,10);
    scanf("%s",liste[i].vorname);

    while(strlen(liste[i].vorname)>15) //liefert die Anzahl der Buchstaben der Zeichenkette vorname zurück
    {

    gotoxy(0,23);

    printf ("!!!Bitte nicht mehr als 15 Zeichen eingeben!!!\n");
    printf ("!!!Bitte Eingabe wiederholen \n");
    printf ("\t\t\t \n");
    gotoxy(26,10);
    scanf("%s",liste[i].vorname);
    }

    gotoxy(26,12);
    scanf("%i",&liste[i].nummer);

    while(liste[i].nummer>9999)
    {

    gotoxy(0,23);

    printf ("!!!Bitte nicht mehr als 10 Zeichen eingeben!!!\n");
    printf ("!!!Bitte Eingabe wiederholen \n");
    printf ("\t\t\t \n");
    gotoxy(26,12);
    scanf("%i",liste[i].nummer);
    }

    gotoxy(26,14);
    scanf("%s",liste[i].email);

    while(strlen(liste[i].email)>30) //strlen liefert die Anzahl der Buchstaben der Zeichenkette email zurück
    { //wenn Anzahl höher als vordefiniert dann erneute Eingabe

    gotoxy(0,23);

    printf ("!!!Bitte nicht mehr als 30 Zeichen eingeben!!!\n");
    printf ("!!!Bitte Eingabe wiederholen \n");
    printf ("\t\t\t \n");
    gotoxy(26,17);
    scanf("%s",liste[i].name);
    }

    gotoxy(0,23);
    printf ("\t\t \n");
    printf (" \n");

    gotoxy(0,23);
    printf ("\n\n\tMoechten Sie die Eingaben aendern? (j/n) \n");
    }

    while(getch()=='j'); //wenn ja - erneute Eingabe

    FILE *zeiger;
    zeiger=fopen("a:\liste.txt","w"); //öffnen der Datensätze zum schreiben
    if (zeiger != NULL)
    {

    fprintf(zeiger,"%i\n",i); //schreibt die Anzahl der Datensätze in die "Liste"
    for (x=0; x<i; x=x+1)

    {

    fprintf (zeiger,"%s",&liste[x].name);
    fprintf (zeiger,"%s",&liste[x].vorname);
    fprintf (zeiger,"%i",&liste[x].nummer);
    fprintf (zeiger,"%s",&liste[x].email);
    }
    fclose(zeiger);

    }
    else
    {
    printf ("Programm konnte Ihre Daten nicht speichern...");
    getch();
    }
    printf ("\n\n\tDaten wurden erfolgreich gespeichert!\n");
    printf ("\n\n\Druecken Sie eine belibige Taste um ins Hauptmenue zurueckzukehren\n");
    getch();
    }

    void ausgabe() //3.Unterprogramm

    {
    int n;
    clrscr();
    printf (" Telefonliste: \n");
    printf (" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
    printf (" Name Vorname Nummer Email \n");
    for(x=0; x<i; x=x+1)
    {
    printf (" %s %s %i %s \n",liste[n].name,liste[n].vorname,liste[n].nummer,liste[n].email);

    }

    printf ("\n\n\n");
    printf ("Bitte druecken Sie `h` um ins Hauptmenue zurueckzukehren\n");
    while(getch()!='h') //Schleife solange andere Taste als hgedrückt wird
    printf ("Bitte druecken Sie `h` um ins Hauptmenue zurueckzukehren\n");

    }

    void suchen()
    {
    char stichwort[31];
    clrscr();
    gotoxy(16,12);
    printf ("\n\t\t Namen suchen\n");
    printf ("\n\t\t Bitte geben Sie ein Stichwort ein:\n");
    gotoxy(35,17);
    scanf("%s",stichwort);

    char b,n;

    {

    {
    clrscr();
    printf (" Suchergebnis: \n");
    printf (" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
    printf (" Name Vorname Nummer Email \n");
    for(x=0; x<i; x=x+1);
    if (strcmp(liste[n].name,stichwort) == 0) //vergleicht die Eingabe mit den Einträgen aus den Datensätzen
    {

    printf (" %s %s %d %s \n",liste[n].name,liste[n].vorname,liste[n].nummer,liste[n].email);

    b++; //Eingegebener Datensatz wird um 1 erhöht

    }

    }
    }

    if (b==0)

    {
    printf ("\nTeilnehmer nicht vorhanden!\n");
    printf ("\nDuecken Sie eine beliebige Taste um ins Hauptmenue zu gelangen\n");
    getch();
    }
    else
    {
    printf ("\nDuecken Sie eine beliebige Taste um ins Hauptmenue zu gelangen\n");
    getch();
    }

    }

    void beenden()

    {
    clrscr();
    gotoxy(16,12);
    printf ("\t\tSie haben das Programm beendet.\a\n");
    gotoxy(16,14);
    printf ("\t\t (beliebige Taste druecken)\n");
    getch();
    exit(0);
    }



  • Also:

    das Speichern kann nicht richtig funktionieren, da du die Adressen in die Datei schreibst

    fprintf (zeiger,"%s",&liste[x].name);
    fprintf (zeiger,"%s",&liste[x].vorname);
    fprintf (zeiger,"%i",&liste[x].nummer);
    fprintf (zeiger,"%s",&liste[x].email);
    


  • Wenn du das Prog startest und "Ausgabe" wählst, kann es nicht funktionieren, weil keine Daten da sind. Müsstest Sie vorher schon einlesen.

    habe dir jetzt mal die Einlesefunktion berichtigt. Versuche es mal weiterzumachen.

    #include <stdio.h>
    #include <conio.h> //laden von Bibliotheken die benötigt werden
    #include <stdlib.h>
    #include <string.h>
    
    struct daten // Datenstruktur festlegen
    
    {
    	char name[20];
    	char vorname[15]; //zu strukturierende Daten...
    	char email[30]; //...mit fest vorgeschriebener Zeichenanzahl
    	int nummer;
    	char stichwort[31];
    } liste[100]; //legt 100 Datensätze mit Namen "Liste" maximal
    
    int i=0,x; //dekl.einer Variablen i mit Wertzuweisung(Definition) 1 und...
    //..einer Var. x ohne Wert
    char szFile[] = "D:\\Liste.txt";
    
    void menue();
    void eingabe(); //anmelden aller Unterfunktionen des Progamms
    void ausgabe();
    void suchen();
    void beenden();
    
    void main() //Hauptfunktion
    
    {
    
    	int x;
    	FILE *zeiger;
    	zeiger=fopen(szFile,"r"); //öffnen der Datensätze zum lesen
    	if (zeiger != NULL)
    	{
    		if(feof(zeiger)==0) //prüfen ob der Dateizeiger am Ende der Datei steht
    
    		{
    			fscanf(zeiger,"%i",&i); //liest Anzahl der Datensätze
    			for(x=0;x<=i && feof(zeiger)==0;x=x+1) //wenn gilt dass beide Bedingungen zutreffen(wahr sind)
    				//1.Bed.:Var x=0 xgrößergleich i UND...
    				//2.Bed.:Zeiger am Ende der Datei
    			{
    				fscanf (zeiger,"%s",&liste[x].name); //Anweisung was gelesen werden soll
    				fscanf (zeiger,"%s",&liste[x].vorname);
    				fscanf (zeiger,"%i",&liste[x].nummer);
    				fscanf (zeiger,"%s",&liste[x].email);
    			}
    
    		}
    
    		fclose(zeiger);
    	}
    
    	for(;;) //FOR-Schleife ohne Abbruchbedingung - Endlosschleife
    		menue();
    }
    
    void menue() //1.Unterfunktion
    {
    	system("cls");
    	//gotoxy(1,5);
    	printf (" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
    	printf (" X X\n");
    	printf (" X Online-Telefonverzeichnis X\n");
    	printf (" X----------------------------------------X\n");
    	printf (" X X\n");
    	printf (" X Bitte waehlen Sie: X\n");
    	printf (" X ----------------------- X\n");
    	printf (" X X\n");
    	printf (" X 1 Teilnehmer eingeben X\n");
    	printf (" X X\n");
    	printf (" X 2 Teilnehmer ausgeben X\n");
    	printf (" X X\n");
    	printf (" X 3 Teilnehmer suchen X\n");
    	printf (" X X\n");
    	printf (" X 4 Programm beenden X\n");
    	printf (" X X\n");
    	printf (" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
    
    	char a;
    	a = getch();
    	switch(a) //Anweisung für Tastatureingaben oder Menü-Auswahl
    	{
    
    	case '1' : eingabe(); break; // case block:
    	case '2' : ausgabe(); break; //Zuweisung bestimmter Tasten zu den jeweiligen Unterprogrammen
    	case '3' : suchen(); break; //break Anweisung beendet einen case Block
    	case '4' : beenden(); break; //
    	default : menue(); // wenn alle case Blöcke nicht zutreffen...
    		//...RÜcksprung ins Hauptmenue
    
    	}
    
    }
    
    void eingabe() //2.Unterfunktion
    {	
    	do //führe aus
    	{
    		system("cls");
    		//gotoxy(1,3);
    		printf (" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
    		printf (" X X\n");
    		printf (" X Bitte geben Sie Ihre Daten ein X\n");
    		printf (" X----------------------------------------X\n");
    		printf (" X X\n");
    		printf (" X Name : ");	// Namen einlesen
    
    		fgets(liste[i].name, 20, stdin);	// es werden maximal 20 Zeichen gelesen
    
    		printf (" X X\n");
    		printf (" X Vorname: ");
    
    		fgets(liste[i].vorname, 15, stdin); // es werden maximal 15 Zeichen gelesen
    
    		printf (" X X\n");
    		printf (" X Nummer : ");
    
    		scanf("%i", &liste[i].nummer);
    
    		while(liste[i].nummer>9999)
    		{
    			//gotoxy(0,23);
    
    			printf ("!!!Bitte nicht mehr als 10 Zeichen eingeben!!!\n");
    			printf ("!!!Bitte Eingabe wiederholen \n");
    			printf ("\t\t\t \n");
    			//gotoxy(26,12);
    			scanf("%i", &liste[i].nummer);
    		}
    
    		printf (" X X\n");
    		printf (" X Email : ");
    
    		fflush(stdin);
    		fgets(liste[i].email, 30, stdin);	// liest max. 30 Zeichen
    
    		printf (" X X\n");
    		printf (" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
    
    		//gotoxy(26,8);
    
    		i++; //Nr. des Datensatzes der eingegeben wird erhöht sich um 1
    
    		//gotoxy(0,23);
    		printf ("\t\t \n");
    		printf (" \n");
    
    		//gotoxy(0,23);
    		printf ("\n\n\tMoechten Sie die Eingaben aendern? (j/n) \n");
    	}
    	while(getch()=='j'); //wenn ja - erneute Eingabe
    
    	FILE *zeiger;
    	zeiger=fopen(szFile,"w"); //öffnen der Datensätze zum schreiben
    
    	if (zeiger != NULL)
    	{
    
    		fprintf(zeiger,"%i\n",i); //schreibt die Anzahl der Datensätze in die "Liste"
    
    		for (x=0; x<i; x=x+1)
    		{
    
    			fprintf (zeiger,"%s", liste[x].name);
    			fprintf (zeiger,"%s", liste[x].vorname);
    			fprintf (zeiger,"%i\n", liste[x].nummer);
    			fprintf (zeiger,"%s", liste[x].email);
    		}
    
    		fclose(zeiger);
    
    	}
    	else
    	{
    		printf ("Programm konnte Ihre Daten nicht speichern...");
    		getch();
    	}
    	printf ("\n\n\tDaten wurden erfolgreich gespeichert!\n");
    	printf ("\n\n\tDruecken Sie eine belibige Taste um ins Hauptmenue zurueckzukehren\n");
    	getch();
    }
    
    void ausgabe() //3.Unterprogramm
    {
    	int n;
    	system("cls");
    
    	printf (" Telefonliste: \n");
    	printf (" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
    	printf (" Name Vorname Nummer Email \n");
    
    	for(x=0; x<i; x=x+1)
    	{
    		printf (" %s %s %i %s \n",liste[n].name,liste[n].vorname,liste[n].nummer,liste[n].email);
    	}
    
    	printf ("\n\n\n");
    	printf ("Bitte druecken Sie `h` um ins Hauptmenue zurueckzukehren\n");
    
    	while(getch()!='h') //Schleife solange andere Taste als hgedrückt wird
    		printf ("Bitte druecken Sie `h` um ins Hauptmenue zurueckzukehren\n");
    
    }
    
    void suchen()
    {
    	char stichwort[31];
    	system("cls");
    	//gotoxy(16,12);
    	printf ("\n\t\t Namen suchen\n");
    	printf ("\n\t\t Bitte geben Sie ein Stichwort ein:\n");
    	//gotoxy(35,17);
    	scanf("%s",stichwort);
    
    	char b,n;
    
    	{
    
    		{
    			system("cls");
    			printf (" Suchergebnis: \n");
    			printf (" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
    			printf (" Name Vorname Nummer Email \n");
    			for(x=0; x<i; x=x+1);
    			if (strcmp(liste[n].name,stichwort) == 0) //vergleicht die Eingabe mit den Einträgen aus den Datensätzen
    			{
    
    				printf (" %s %s %d %s \n",liste[n].name,liste[n].vorname,liste[n].nummer,liste[n].email);
    
    				b++; //Eingegebener Datensatz wird um 1 erhöht
    			}
    		}
    	}
    
    	if (b==0)
    
    	{
    		printf ("\nTeilnehmer nicht vorhanden!\n");
    		printf ("\nDuecken Sie eine beliebige Taste um ins Hauptmenue zu gelangen\n");
    		getch();
    	}
    	else
    	{
    		printf ("\nDuecken Sie eine beliebige Taste um ins Hauptmenue zu gelangen\n");
    		getch();
    	}
    
    }
    
    void beenden()
    
    {
    	system("cls");
    	//gotoxy(16,12);
    	printf ("\t\tSie haben das Programm beendet.\a\n");
    	//gotoxy(16,14);
    	printf ("\t\t (beliebige Taste druecken)\n");
    	getch();
    	exit(0);
    }
    


  • Hoch verehrtes C Forum
    Nun denn - nach langer Krankheit und dem üblichen Weihnachtshallas sitze ich nun wieder an meinem geliebten Telefonverzeichnis!
    Dank Horst2, Konfusius & Co. habe ich meine Fehler korrigiert und das Programm läuft schon recht ordentlich. 😃
    Als da wären noch ein paar Fragen zum Feintuning:
    1. I.d. Eingabefunkt. darf eine gewisse Zeichenanzahl nicht überschritten werden.
    In meiner alten Version des Programmes hat dies auch gefuntzt.Durch den Austauch von scanf durch fgets geht diese Option verloren.WHY??
    2. In der Suchfunkt. habe ich

    if (strcmp(liste[n].name,stichwort) == 0)

    in die for - Schleife gelegt.
    Es werden trotzdem keine Ergebnisse ausgespuckt, obwohl übereinstimmende Stichworte benutzt wurden 😕
    Für schnelle Hilfe wäre ich unendlich dankbar, da ich am Donnerstag den Rotz präsentieren muß!!
    Das mit dem"convert coffein into code" klappt bei mir irgendwie nich!!!
    Vielen vielen Dank!!!!

    Hier nochmal der code:

    #include <stdio.h>
    #include <conio.h>          //laden von Bibliotheken die benötigt werden
    #include <stdlib.h>
    #include <string.h>
    
    struct daten					// Datenstruktur festlegen
    
    {
    	 char name[20];
    	 char vorname[15];      //zu strukturierende Daten...
    	 char email[30];        //...mit fest vorgeschriebener Zeichenanzahl
    	 int nummer;
    	 char stichwort[31];
    }             liste[100];		//legt 100 Datensätze mit Namen "Liste" maximal
    
    int i=0,x;                   //dekl.einer Variablen i mit Wertzuweisung(Definition) 0 und...
    			     					 //..einer Var. x ohne Wert
    
     char szFile[] = "A:\\Liste.txt";
    
    void menue();
    void eingabe();             //anmelden aller Unterfunktionen des Progamms
    void ausgabe();
    void suchen();
    void beenden();
    
    void main()                 //Hauptfunktion
    
    {
    
    	int x;
       FILE *zeiger;
       zeiger=fopen(szFile,"r");		//öffnen der Datensätze zum lesen
       if (zeiger != NULL)
       {
    		if(feof(zeiger)==0)                 //prüfen ob der Dateizeiger am Ende der Datei steht
    
    	 {
    		fscanf(zeiger,"%i",&i);			//liest Anzahl der Datensätze
    	    for(x=0;x<=i && feof(zeiger)==0;x=x+1)   //wenn gilt dass beide Bedingungen zutreffen(wahr sind)
    						     //1.Bed.:Var x=0 xgrößergleich i UND...
    						     //2.Bed.:Zeiger am Ende der Datei
    	    {
            fscanf (zeiger,"%s",&liste[x].name);            //Anweisung was gelesen werden soll
    		  fscanf (zeiger,"%s",&liste[x].vorname);
            fscanf (zeiger,"%i",&liste[x].nummer);
    		  fscanf (zeiger,"%s",&liste[x].email);
    	    }
    
    		}
    
    	 fclose(zeiger);
       }
    
        for(;;)		//FOR-Schleife ohne Abbruchbedingung - Endlosschleife
        menue();
    }
    
    void menue()                    //1.Unterfunktion
    {
    			clrscr();
    	 gotoxy(1,5);
    			printf ("                  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
    			printf ("                  X                                        X\n");
    			printf ("                  X        Online-Telefonverzeichnis       X\n");
    			printf ("                  X----------------------------------------X\n");
    			printf ("                  X                                        X\n");
    			printf ("                  X         Bitte waehlen Sie:             X\n");
    			printf ("                  X       -----------------------          X\n");
    			printf ("                  X                                        X\n");
    			printf ("                  X        1 Teilnehmer eingeben           X\n");
    			printf ("                  X                                        X\n");
    			printf ("                  X        2 Teilnehmer ausgeben           X\n");
    			printf ("                  X                                        X\n");
    			printf ("                  X        3 Teilnehmer suchen             X\n");
    			printf ("                  X                                        X\n");
    			printf ("                  X        4 Programm beenden              X\n");
    			printf ("                  X                                        X\n");
    			printf ("                  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
    
    	 char a;
    	 a = getch();
    	 switch(a)                              //Anweisung für Tastatureingaben oder Menü-Auswahl
    		{
    
    	    case '1' : eingabe(); break;          // case block:
    	    case '2' : ausgabe(); break;          //Zuweisung bestimmter Tasten zu den jeweiligen Unterprogrammen
    	    case '3' : suchen(); break;           //break Anweisung beendet einen case Block
    	    case '4' : beenden(); break;          //
    	    default  : menue();                   // wenn alle case Blöcke nicht zutreffen...
    						  //...RÜcksprung ins Hauptmenue
    
    	    }
    
    }
    
    void eingabe()           //2.Unterfunktion
    
    {
    
     do //führe aus
        {
            system("cls");
            //gotoxy(1,3);
    
            printf ("       Bitte geben Sie Ihre Daten ein \n");
            printf (" ----------------------------------------------\n");
            printf (" \n");
            printf ("  Name : ");    // Namen einlesen
    
            fgets(liste[i].name, 20, stdin);    // es werden maximal 20 Zeichen gelesen
    
            printf ("\n");
            printf ("  Vorname : ");
    
            fgets(liste[i].vorname, 15, stdin); // es werden maximal 15 Zeichen gelesen
    
            printf (" \n");
            printf ("  Nummer : ");
    
            scanf("%i", &liste[i].nummer);
    
            while(liste[i].nummer>9999)
            {
                //gotoxy(0,23);
    
                printf ("!!!Bitte nicht mehr als 10 Zeichen eingeben!!!\n");
                printf ("!!!Bitte Eingabe wiederholen \n");
                printf ("\t\t\t \n");
                //gotoxy(26,12);
                scanf("%i", &liste[i].nummer);
            }
    
            printf (" \n");
            printf ("  Email : ");
    
            fflush(stdin);
            fgets(liste[i].email, 30, stdin);    // liest max. 30 Zeichen
    
            printf (" \n");
    
            //gotoxy(26,8);
    
            i++; //Nr. des Datensatzes der eingegeben wird erhöht sich um 1
    
            //gotoxy(0,23);
            printf ("\t\t \n");
            printf (" \n");
    
            //gotoxy(0,23);
            printf ("\n\n\tMoechten Sie die Eingaben aendern? (j/n) \n");
        }
        while(getch()=='j'); //wenn ja - erneute Eingabe
    
        FILE *zeiger;
        zeiger=fopen(szFile,"w"); //öffnen der Datensätze zum schreiben
    
        if (zeiger != NULL)
        {
    
            fprintf(zeiger,"%i\n",i); //schreibt die Anzahl der Datensätze in die "Liste"
                                      //\n an dieser Stelle bewirkt, dass im ARRAY
                                      //ein Zeilenumbruch stattfindet
            for (x=0; x<i; x=x+1)
            {
    
                fprintf (zeiger,"%s", liste[x].name);
                fprintf (zeiger,"%s", liste[x].vorname);
                fprintf (zeiger,"%i\n", liste[x].nummer);
                fprintf (zeiger,"%s", liste[x].email);
            }
    
            fclose(zeiger);
    
        }
        else
        {
            printf ("Programm konnte Ihre Daten nicht speichern...");
            getch();
        }
        printf ("\n\n\tDaten wurden erfolgreich gespeichert!\n");
        printf ("\n\n\tDruecken Sie eine belibige Taste um ins Hauptmenue zurueckzukehren\n");
        getch();
    }
    
    void ausgabe()					//3.Unterprogramm
    
    {
    	int n;
       clrscr();
       printf ("                        Telefonliste:               \n");
       printf ("      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
       printf ("           Name           Vorname                Nummer             Email                 \n");
       for(n=0;n<i;n=n+1)
       {
         printf ("         %s          %s                      %i                 %s                   \n",liste[n].name,liste[n].vorname,liste[n].nummer,liste[n].email);
    
    	    }
    
    	 printf ("\n\n\n");
    	 printf ("Bitte druecken Sie `h` um ins Hauptmenue zurueckzukehren\n");
    	 while(getch()!='h')			//Schleife solange andere Taste als hgedrückt wird
    	 printf ("Bitte druecken Sie `h` um ins Hauptmenue zurueckzukehren\n");
    
    	 }
    
       void suchen()
    	{
    		char stichwort[31];
    		clrscr();
    		gotoxy(16,12);
    		printf ("\n\t\t               Namen suchen\n");
    		printf ("\n\t\t     Bitte geben Sie ein Stichwort ein:\n");
    		gotoxy(35,17);
    		scanf("%s",stichwort);
    
    		char b,n;
    
       	clrscr();
    		printf ("\t\t\nNamen mit gesuchtem Stichwort:\n\n\n");
    		printf ("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
    
    		printf("%s",liste[n].name);
    		printf("%s",liste[n].stichwort);
    
    		{
    	  		clrscr();
       		printf ("                        Suchergebnis:              \n");
       		printf ("          XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
       		printf ("           Name           Vorname                    Nummer              Email                     \n");
        		for(n=0;n<i;n=n+1);
    
       		{
               	if (strcmp(liste[n].name,stichwort) == 0)    //vergleicht die Eingabe mit den Einträgen aus den Datensätzen
    
         			printf ("         %s             %s                        %i                  %s               \n",liste[n].name,liste[n].vorname,liste[n].nummer,liste[n].email);
    
          		 b++;
    
    	                                              //Eingegebener Datensatz wird um 1 erhöht
    
          	}
        }
    
          if (b==0)
    
          {
    	      printf ("\nTeilnehmer nicht vorhanden!\n");
    	 printf ("\nDuecken Sie eine beliebige Taste um ins Hauptmenue zu gelangen\n");
    	 getch();
          }
       else
       {
          printf ("\nDuecken Sie eine beliebige Taste um ins Hauptmenue zu gelangen\n");
          getch();
       }
    
    }
    
    void beenden()
    
    {
    	clrscr();
    	gotoxy(16,12);
    	printf ("\t\tSie haben das Programm beendet.\a\n");
    	gotoxy(16,14);
    	printf ("\t\t  (beliebige Taste druecken)\n");
    	getch();
    	exit(0);
    }
    


  • bleibe bitte in diesem thread und mache keinen neuen auf. danke.



  • c.rackwitz schrieb:

    bleibe bitte in diesem thread und mache keinen neuen auf. danke.

    nun - was auch immer thread an dieser Stelle bedeuten mag...Ich denke es ist unschwer zu erkennen, dass ich nicht die allwissende Programmierschlampe bin und mir mit solchen statements in keinster Weise geholfen ist.

    Trotzdem vielen lieben Dank...



  • thread heisst diskussionsfaden. ich wuerde es sehr schaetzen, wenn du nicht 3 verschiedene threads mit dem gleichen titel und dem gleichen problem eroeffnen wuerdest.

    tust du mir bitte den gefallen?



  • Well - nun da ich das mit dem Thread begriffen habe und die Ausgabefunkt. meines Programmes läuft nun nochmal eine Frage zu meiner Suchfunkt.:

    void suchen()
    	{
    		char stichwort[31];
    		clrscr();
    		gotoxy(16,12);
    		printf ("\n\t\t               Namen suchen\n");
    		printf ("\n\t\t     Bitte geben Sie ein Stichwort ein:\n");
    
    		gotoxy(35,17);
    		scanf("%s",stichwort);
    
    		char b,n;
    
       	clrscr();
    		printf ("\t\t\nNamen mit gesuchtem Stichwort:\n\n\n");
    		printf ("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
    
    		printf("%s",liste[n].name);
    		printf("%s",liste[n].stichwort);
    
    		{
    	  		clrscr();
       		printf ("                        Suchergebnis:              \n");
       		printf ("          XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
       		printf ("           Name           Vorname                    Nummer              Email                     \n");
    
        		for(n=0;n<i;n=n+1);
    
             if (strcmp(liste[n].name,stichwort) == 0)    //vergleicht die Eingabe mit den Einträgen aus den Datensätzen
    
           {
            if (b==0)
          	printf ("   %s      %s       %i      %s               \n",liste[n].name,liste[n].vorname,liste[n].nummer,liste[n].email);
    
          	 }
    
              b++;
    
          }
      else
    
    	 printf ("\nTeilnehmer nicht vorhanden!\n");
    	 printf ("\nDuecken Sie eine beliebige Taste um ins Hauptmenue zu          gelangen\n");
    	 		getch();
    
      {
         printf ("\nDuecken Sie eine beliebige Taste um ins Hauptmenue zu gelangen\n");
          getch();
       }
    
    }
    

    In meinem C Tutorial steht, dass bei verschachtelten if Anweisungen die 2. Bedingung vor die 1. Anweisung gesetzt werden muss.
    Dies habe ich auch getan, jedoch sagt der Compiler mir dann, dass ich else an eine falsche Position gesetzt habe.WARUM??? 😡



  • stepop schrieb:

    In meinem C Tutorial steht, dass bei verschachtelten if Anweisungen die 2. Bedingung vor die 1. Anweisung gesetzt werden muss.
    Dies habe ich auch getan, jedoch sagt der Compiler mir dann, dass ich else an eine falsche Position gesetzt habe.WARUM??? 😡

    deine einrueckung laesst zu wuenschen uebrig. ruecke ordentlich ein, dann siehst du, was der compiler fuer probleme hat.

    mach das bitte, denn so lernst du mehr als wenn du dir deinen code von anderen schreiben laesst.



  • c.rackwitz schrieb:

    stepop schrieb:

    In meinem C Tutorial steht, dass bei verschachtelten if Anweisungen die 2. Bedingung vor die 1. Anweisung gesetzt werden muss.
    Dies habe ich auch getan, jedoch sagt der Compiler mir dann, dass ich else an eine falsche Position gesetzt habe.WARUM??? 😡

    deine einrueckung laesst zu wuenschen uebrig. ruecke ordentlich ein, dann siehst du, was der compiler fuer probleme hat.

    mach das bitte, denn so lernst du mehr als wenn du dir deinen code von anderen schreiben laesst.

    Geschätzter Moderator!
    Hier geht es nicht darum mich auf misslungene Klammersetzung aufmerksam zu machen, denn wenn diese richtig positioniert sind laeuft die Funktion ebenfalls nicht(ist ja bestimmt aufgefallen!).
    Ferner liegt mir auch sehr wenig daran mir irgenwas vorkauen zu lassen. Wenn man den THREAD aufmerksam verfolgt laesst sich feststellen, dass ich binnen kurzer Zeit zu einer Loesung kommen muss. Da ich kein Programmierer bin und es auch nie sein werde ist hier ein nuetzlicher Tipp zu Vollendung des Gesamten wesentlich sinnvoller als goldene Zeit mit Korrinten kacken zu verplempern.
    Vielen Dank für Ihre Anteilnahme



  • stepop schrieb:

    ... wesentlich sinnvoller als goldene Zeit mit Korrinten kacken zu verplempern.
    Vielen Dank für Ihre Anteilnahme

    Es heisst Korinthen.



  • na na na, du willst hilfe, nicht ich. ein bisschen demut waere nicht verkehrt...

    wenn ich wuesste, was in deine if und else zweige gehoeren soll, koennte ich dir den code einfach hinwerfen.
    das weiss ich aber nicht, also kann ich dir nur allgemein raten, dies und das zu tun.
    und weil ich so lieb bin, ruecke ich dir deinen code jetzt mal ein und setze ein paar klammern, damit du sehen kannst, wo der fehler sein koennte:

    void suchen()
    {
    	char stichwort[31];
    	clrscr();
    	gotoxy(16,12);
    	printf ("\n\t\t			   Namen suchen\n");
    	printf ("\n\t\t	 Bitte geben Sie ein Stichwort ein:\n");
    
    	gotoxy(35,17);
    	scanf("%s",stichwort);
    
    	char b,n;
    
    	clrscr();
    	printf ("\t\t\nNamen mit gesuchtem Stichwort:\n\n\n");
    	printf ("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
    
    	printf("%s",liste[n].name);
    	printf("%s",liste[n].stichwort);
    
    	{ // sinnloser block
    		clrscr();
    		printf ("						Suchergebnis:			  \n");
    		printf ("		  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n");
    		printf ("		   Name		   Vorname					Nummer			  Email					 \n");
    
    		for(n=0;n<i;n=n+1); // dieser loop hat keinen koerper
    
    		if (strcmp(liste[n].name,stichwort) == 0)
    		{
    			if (b==0) // diese beiden ifs kann man zusammenfassen
    			{
    				printf ("   %s	  %s	   %i	  %s			   \n",liste[n].name,liste[n].vorname,liste[n].nummer,liste[n].email);
    			}
    		}
    
    		b++;
    
    	}
    	else
    	{
    		printf ("\nTeilnehmer nicht vorhanden!\n");
    	}
    
    	printf ("\nDuecken Sie eine beliebige Taste um ins Hauptmenue zu		  gelangen\n");
    	getch();
    
    	{// sinnloser block
    		printf ("\nDuecken Sie eine beliebige Taste um ins Hauptmenue zu gelangen\n");
    		getch();
    	}
    }
    

    sonst noch wuensche? du darfst mich ruhig wie einen fussabtreter behandeln. ich werd schliesslich koeniglich bezahlt, hier rund um die uhr innerhalb von maximal 5 minuten jeden post zu beantworten.


Anmelden zum Antworten