komme nicht weiter



  • Hallo Gemeinde,

    Ichj habe hier mein kleines übungsprogramm gebastelt, funktioniert soweit auch nur :

    Wenn ich case 4 betätige nämlch datensatz suchen so findet er von 2 eingegebenen immer nur den letzen. Weiß jemand weiter? ich leider nicht mehr:(

    #include <stdlib.h>
    #include <conio.h>
    #include <stdio.h>
    #include <string.h>
    #include <iostream>
    
    struct strasse
    {
    	char str[50];
    	char ort[50];
    	long plz;
    };
    
    void main()
    {
    	int i=0;
    
    	struct strasse st[20];
    
    	FILE *pf;
    
    	char SAuswahl='j';
    	while (SAuswahl=='j')
    	{
    		int auswahl;
    		printf("Bitte wählen Sie aus folgenden Optionen aus :\n");
    		printf("1. Datenbank erstellen\n");
    		printf("2. Datenbank eintraege anzeigen\n");
    		printf("3. Datenbank egaenzen\n");
    		printf("4. Datenbank suchen\n");
    		printf("5. Datenbank Programm wird beendet\n");
    		printf("\n");
    		printf("Bitte treffen Sie Ihre Auswahl\n");
    		fflush(stdin);
    		scanf("%i", &auswahl);
    
    		switch(auswahl)
    		{
    		case 1:
    			{
    				pf=fopen("strasse.txt","w");
    				for(i=0;i<1;i++)
    				{
    					printf("\n\tDatensatz Nr. %i\n", i+1);
    					printf("Bitte geben Sie den Strassen Namen ein: \n");
    					scanf("%s",&st[i].str);
    					printf("Bitte geben Sie den Ort ein:\n");
    					scanf("%s",&st[i].ort);
    					printf("Bitte geben Sie dir plz ein :\n");
    					scanf("%li",&st[i].plz);
    				}
    				for(i=0;i<1;i++)
    				{
    					fprintf(pf,"%s\n%s\n%li\n",st[i].str,st[i].ort,st[i].plz);
    				}
    				fclose(pf);
    				printf("Durch Tastendruck gelangen Sie zurueck zum Hauptmenue ! \n");
    				fflush(stdin);
    				getch();
    				system("cls");
    
    				break;
    			}
    
    		case 2:
    			{
    				pf=fopen("strasse.txt","r");
    				int P=0;
    				while(!feof(pf))
    				{
    					fscanf(pf,"%s\n %s\n %li\n",st[i].str,st[i].ort,st[i].plz);
    					P++;
    				}
    
    				printf("Folgende Datensaetze wurden gepeichert : \n");
    
    				for(i=0;i<P-1;i++)
    				{
    					printf("\n\tDatensatz Nr. %i\n\t", i+1);
    					printf("%s\n\t",st[i].str);
    					printf("%s\n\t",st[i].ort);
    					printf("%li\n\t",st[i].plz);
    				}
    
    				fclose(pf);
    				printf("\n\tDurch Tastendruck gelangen Sie zurueck ins Hauptmenue\n");
    				fflush(stdin);
    				getch();
    				system("cls");
    				break;
    			}
    
    		case 3:
    			{
    				pf=fopen("strasse.txt","a");
    				for(i=0;i<1;i++)
    				{
    					printf("\n\tNeuer Datensatz Nr. %i\n", i+1);
    					printf("Bitte geben Sie den Strassen Namen ein: \n");
    					scanf("%s",&st[i].str);
    					printf("Bitte geben Sie den Ort ein:\n");
    					scanf("%s",&st[i].ort);
    					printf("Bitte geben Sie dir plz ein :\n");
    					scanf("%li",&st[i].plz);
    				}
    				for(i=0;i<1;i++)
    				{
    					fprintf(pf,"%s\n %s\n %li\n",st[i].str,st[i].ort,st[i].plz);
    				}
    				fclose(pf);
    				printf("\n\tDurch Tastendruck gelangen Sie zurueck ins Hauptmenue\n");
    				fflush(stdin);
    				getch();
    				system("cls");
    				break;
    			}
    		case 4:
    			{
    
    				// Einlesen der Straßendatei in den Speicher
    				pf=fopen("strasse.txt","r");
    				int P=0;
    				while(!feof(pf))
    				{
    					fscanf(pf,"%s\n %s\n %li\n",st[i].str,st[i].ort,st[i].plz);
    					P++;
    				}
    				fclose(pf);
    
    				// Hier gilt: Alle Daten sind hoffentlich im Speicher
    
    				// Eingabe eines Suchbegriffes
    				char sname[50];
    				printf("Bitte geben Sie den gewuenschten Suchnamen ein: \n");
    				scanf("%s",&sname);
    
    					for(i=0;i<P-1;i++)
    					{
    						int suche=1;
    						suche=strcmp(sname,st[i].str);
    						if(suche==0)
    						{
    
    							printf("\n\tErgebnis Datensatz Nr. %i\n", i+1);
    							printf("%s\t\n",st[i].str);
    							printf("%s\t\n",st[i].ort);
    							printf("%li\t\n",st[i].plz);
    						}
    					}
    
    				printf("\n\tDurch Tastendruck gelangen Sie zurueck ins Hauptmenue\n");
    				fflush(stdin);
    				getch();
    				system("cls");
    				break;
    			}
    		case 5:
    			{
    				SAuswahl='n';
    				printf("Das Programm wird beendet ! \n");
    				break;
    			}
    		default:
    			{
    				printf("* * * * Ungueltige Eingabe * * * * \n");
    				system("pause");
    			}
    			}
    			}
    
    }
    


  • also mal nach nen schnellen rüberschauen - ich vermute, du schreibst beim einlesen deiner datei immer in den gleichen struct.

    while(!feof(pf))
    {
    fscanf(pf,"%s\n %s\n %li\n",st[i].str,st[i].ort,st[i].plz);
    P++;
    }

    das p wird zwar hochgezählt aber das i nicht...



  • das bedeutet statt [i] [P] ?



  • ja



  • aber nur bei fscanf nicht bei fprintf oder?



  • probieren geht über studieren ^^

    und: du must dir, wenn du ncith weiter kommst genau simulieren, welche Variable welchen Wert hat (oder du nutzt gleich den Debugger, der zeigt dir das auch an)


Anmelden zum Antworten