Hallo!!
Ich habe schon ein wenig im Forum geguckt ob ich ein ähnliches Thema finde, konnte aber keines finden.
Meine C-Kenntnisse sind noch nicht sehr gut und ich probiere mich durch rumprobieren.
Das Programm soll Filme abspeichern. Bei der EIngabe soll durch die EAN-Nummer geprüft werden, ob es den Film gibt. Ist er vorhanden wird nur noch die Anzahl der Filme ausgegeben. An dieser Stelle tritt auch das Problem auf. Mir wird immer ein Film zu viel angegeben.
Hier ist mal der CODE:
Ich würde mich freuene, wenn mir jemand sagt woran das liegt.
Ich habe schon ein wenig im Forum geguckt ob ich ein ähnliches Thema finde, konnte aber keines finden.
Meine C-Kenntnisse sind noch nicht sehr gut und ich probiere mich durch rumprobieren.
Das Programm soll Filme abspeichern. Bei der EIngabe soll durch die EAN-Nummer geprüft werden, ob es den Film gibt. Ist er vorhanden wird nur noch die Anzahl der Filme ausgegeben. An dieser Stelle tritt auch das Problem auf. Mir wird immer ein Film zu viel angegeben.
Hier ist mal der CODE:
Code:
#include <stdio.h>
#include <string.h>
#define DATEI "movies.txt"
struct film {
char ean[14];
char titel[30];
};
struct film movie;
int anzahl = 0;
void speichern() {
FILE *fp;
fp = fopen(DATEI, "a+b");
if(fp != NULL) {
fprintf(fp, "%s",movie.ean);
fprintf(fp, "%s",movie.titel);
fclose(fp);
}
else
printf("Fehler beim Öffnen\n");
}
void eingabe() {
printf("Titel: ");
fgets(movie.titel, sizeof(movie.titel), stdin);
speichern();
}
void menge() {
FILE *fp;
fp = fopen(DATEI, "r+b");
if(fp != NULL) {
while(!feof(fp)) {
fscanf(fp, "%s",movie.ean);
printf("EAN: %s\n", movie.ean);
fscanf(fp, "%s",movie.titel);
printf("Titel: %s\n", movie.titel);
anzahl++;
}
printf("Anzahl an Filmen: %i\n", anzahl);
}
else
printf("Datei konnte nicht geöffnet werden\n");
fclose(fp);
}
void vorhanden() {
FILE *fp;
char ean[14], *help;
int vorhanden = 0;
printf("EAN: ");
scanf("%s",movie.ean);
rewind(stdin);
fp = fopen(DATEI, "r+b");
if(fp != NULL) {
while( fscanf(fp, "%s", ean) != -1) {
if( strcmp(ean, movie.ean) == 0) {
printf("Film schon vorhanden\n");
vorhanden = 1;
}
}
fclose(fp);
}
if( vorhanden == 0) {
help = strrchr(movie.ean, '\0');
*help = '\n';
eingabe();
}
}
int main (int argc, const char * argv[]) {
vorhanden();
menge();
return 0;
}
Ich würde mich freuene, wenn mir jemand sagt woran das liegt.