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)