finde den Fehler nicht
-
ich habe ein Programm geschrieben, welches erlaubt einen Eintrag einer Datei mit namen und Nummer zu suchen. Dieser sollte dann in der Konsole ausgegeben werden. Es wird kein error angezeigt jedoch passiert bei Eingabe eines namens nichts und das Programm bricht den Vorgagng ab. Hier der Code:
#include <stdio.h> #include <stdlib.h> void main() { FILE *pf; char name[100]; char nummer[100]; char suche[100]; //Öffnen pf = fopen("Pfad\\Zu\\der\\Datei.txt","r"); //der Pfad ist wurde abgeändert ;) if(!pf) { perror("FEHLER: "); exit(0); } //Eingabe printf("Suche: "); gets(suche); printf("\n"); //Einlesen for(;;) { fscanf(pf, "%s %s", name, nummer); if(feof(pf)) { break; } } //Suchen if(!strcmp(name,suche)) { printf("Die Nummer von %s ist %s",name,nummer); } fclose(pf); }danke im vorhinein
lg
-
Du überschreibst name und nummer bei jedem Lesevorgang. Du möchtest wohl eher ein ganzes Array von Zeichenketten einlesen. Oder falls du die Daten hinterher nicht mehr brauchst, kannst du auch gleich Einlesen und vergleichen:
#include <stdio.h> #include <stdlib.h> #include <string.h> // fehlte int main() // main gibt int zurück! { FILE *pf; char name[100]; char nummer[100]; char suche[100]; pf = fopen("./test.dat","r"); if(!pf) { perror("FEHLER: "); exit(0); } printf("Suche: "); gets(suche); // gets ist gefährlich und sollte nicht benutzt werden printf("\n"); for(;;) { fscanf(pf, "%s %s", name, nummer); if(feof(pf)) { break; } if(!strcmp(name,suche)) { printf("Die Nummer von %s ist %s\n",name,nummer); // Ein Zeilenumbruch macht die Ausgabe schöner. } } fclose(pf); }Und gleich erzählt dir Wutz, wie gefährlich selbst der korrigierte Code von mir noch ist, weil die Eingaben überhaupt gar nicht geprüft werden.
-
Was spricht der Debugger an den entsprechend interessanten Stellen? ...
gets(suche); printf("\n");Oder baue stattdessen ein
printf("\nVar suche: %s\nNeue Zeile", suche);ein...
Oder benutze am Ende des Programms folgendes:
if(!strcmp(name,suche)) { printf("Die Nummer von %s ist %s",name,nummer); } else { printf("Der Name '%s' wurde nicht gefunden!\n--Programmende--\n", suche); }und wundere Dich dann "womöglich" über den Wert von suche...
-
der Debugger verhält sich ruhig, seitdem ich #include <string.h> eingefügt habe gibt er auch keine Warnungen mehr aus. Habe auch das void von main zu int ausgebessert und einen Zeilenumbruch hinzugefügt. Jedoch funktioniert die Suche immernoch nicht.
Was gibt es für Alternativen zugets(suche);z.B?:
scanf("%s",&suche);
-
cinder schrieb:
der Debugger verhält sich ruhig, seitdem ich #include <string.h> eingefügt habe gibt er auch keine Warnungen mehr aus.
Du verwechseltst Debugger und Compiler, ein Debugger ist ganz was anderes.
Habe auch das void von main zu int ausgebessert und einen Zeilenumbruch hinzugefügt. Jedoch funktioniert die Suche immernoch nicht.
Das waren nur Schönheitskorrekturen, das wichtige ist, wie ich den Code zur Suche verschoben habe und was ich über das überschreiben gesagt habe. Wenn du meinen Code 1:1 übernimmst (bis auf den Dateinamen), dann funktioniert das auch.
cinder schrieb:
Was gibt es für Alternativen zu
gets(suche);z.B?:
scanf("%s",&suche);Ja, vorzugsweise noch mit einer Größenangabe, damit du keinen Pufferüberlauf bekommst:
scanf("%99s",&suche);
-
ok, das hab ich übersehen, danke jetzt funktionierts
