Wörterbuch programmiern in C
Hallo. :)
Ich hoffe von euch kann mir jemand meinen Fehler sagen. Ich soll nämlich ein Wörterbuch programmiern und wenn ich ein Wort eingeben, das ich in der Datenbank schon eingespeichter habe, funktioniert alles. Aber, wenn ein Wort kommt, dass noch nicht gespeichert ist, schmeißts mich immer raus. >.> ...eigentlich sollte eine Anfrage kommen, ob man das Wort speichern will...
also hier mal das Programm:
include<stdio.h> include<conio.h> include<string.h> define MAX 100typedef struct woerterbuch {
char wort[30+1];
char word[30+1];
}Buch;
void main() { int i=0; char search[20]; char suchen[20]; int zahl, gefunden=1, x=0; Buch liste[MAX]={"Hallo", "hello", "Auto", "car", "Sonne", "sun"};
printf("Geben Sie ein, ob Sie von Englisch auf Deutsch (1) oder von Deutsch auf Englisch (2) uebersetzen wollen! ");
scanf("%d", &zahl);
if(zahl==1)
{
printf("\nGeben Sie ein englisches Wort ein, das Sie uebersetzen wollen! ");
scanf("%s", search);
do
{
if(strcmp(search, liste[i].word)==0)
{
printf("Deutsch: %s ", liste[i].wort);
x=1;
gefunden=0;
}
i++;
}while(x!=1);
if(gefunden==1)
{
printf("\nIhr Wort ist nicht in der Datenbank enthalten!");
/*printf("\nWenn Sie das Wort in die Datenbank hinzufügen wollen, drücken sie 1.");
scanf("%d", add);
if(add==1)
{
printf("Das deutsche Wort: ");
scanf("%s", liste[i+1].wort);
printf("Das englische Wort: ");
scanf("%s", liste[i+1].word);
}*/
}
}
else
{
printf("\nGeben Sie ein deutsches Wort ein, das Sie uebersetzen wollen! ");
scanf("%s", suchen);
do
{
if(strcmp(suchen, liste[i].wort)==0)
{
printf("Englisch: %s ", liste[i].word);
gefunden++;
x=1;
}
i++;
}while(x!=1);
if(gefunden==1)
{
printf("\nIhr Wort ist nicht in der Datenbank enthalten!");
}
}
getch();
}
Vielleicht kann mir hier jemand helfen. ? :)
Danke, schonmal im voraus. :)
P.S: und bitte keine Kommentare zum Stil oder sonst was...bin nicht das größte Genie im Programmiern, das weiß ich selber. :)
2 Antworten
Die Schleife
do
{
if(strcmp(search, liste[i].word)==0)
{
printf("Deutsch: %s ", liste[i].wort);
x=1;
gefunden=0;
}
i++;
}while(x!=1);
wird nie beendet, wenn kein passendes "word" gefunden wird. Irgendwann bist du mit "i" bei 100 angekommen und greifst auf ein Element zu, das außerhalb des Arrays liegt. -> BOOM
Lößung:
do
{
if(strcmp(search, liste[i].word)==0)
{
printf("Deutsch: %s ", liste[i].wort);
x=1;
gefunden=0;
}
i++;
}while(x!=1 && i < MAX);
Allerdings bekommst du dann beim eintragen eines neuen Wortes dann probleme:
scanf("%s", liste[i+1].wort);
Da "i" in diesem Fall dann 99 sein wird, wirst du auf das 100. Element zugreifen, welches außerhalb des Arrays sein wird. -> BOOM
Du solltest dir eine Merkervariable einbauen, die dir sagt, an welcher Stelle der Liste du etwas Abspeichern kannst:
void main() { int i=0; char search[20]; char suchen[20]; int zahl, gefunden=1, x=0; Buch liste[MAX]={"Hallo", "hello", "Auto", "car", "Sonne", "sun"};
int Merker = 3; // 3 Elemente in der Liste
printf("Geben Sie ein, ob Sie von Englisch auf Deutsch (1) oder von Deutsch auf Englisch (2) uebersetzen wollen! ");
scanf("%d", &zahl);
if(zahl==1)
{
...
if(gefunden==1)
{
printf("\nIhr Wort ist nicht in der Datenbank enthalten!");
/*printf("\nWenn Sie das Wort in die Datenbank hinzufügen wollen, drücken sie 1.");
scanf("%d", add);
if(add==1)
{
Merker++;
printf("Das deutsche Wort: ");
scanf("%s", liste[Merker].wort);
printf("Das englische Wort: ");
scanf("%s", liste[Merker].word);
}*/
}
}
...
Ich hoffe ich konnte helfen.
Gruß KillerGoldFisch
Danke, habs aber heute um 2 uhr morgens(!!) noch geschafft. :) (und jetzt noch das mim remind eingebaut :)
Ich post es mal, für diejenigen, dies vielleich nochmal selber programmiern müssen... ;)
include<stdio.h> include<conio.h> include<string.h> define MAX 100typedef struct woerterbuch {
char wort[30+1];
char word[30+1];
}Buch;
void dictionary(Buch liste[], int zahl);
void main() { int zahl, replay=1; Buch liste[MAX]={"Hallo", "hello", "Auto", "car", "Sonne", "sun", "Freund", "friend", "Schule", "school", "Lehrer", "teacher"};
do
{
printf("\nGeben Sie ein, ob Sie von Englisch auf Deutsch (1) oder von Deutsch auf Englisch (2) uebersetzen wollen! ");
scanf("%d", &zahl);
dictionary(liste, zahl);
printf("\nWollen Sie noch ein Wort uebersetzen?(1 fuer Ja, 2 fuer Nein)");
scanf("%d", &replay);
}while(replay==1);
getch();
}
void dictionary(Buch liste[], int zahl) { char search[20]; char suchen[20]; int i=0; int gefunden=0, add=1; int rem=5; //5 Elemente in der Liste
if(zahl==1)
{
printf("\nGeben Sie ein englisches Wort ein, das Sie uebersetzen wollen! ");
scanf("%s", search);
do
{
if(strcmp(search, liste[i].word)==0)
{
printf("Deutsch: %s ", liste[i].wort);
gefunden=1;
break;
}
if(strcmp(search, liste[i].word)==1)
{
gefunden=2;
}
i++;
}while(i<strlen(liste[i].word));
if(gefunden==2)
{
printf("\nIhr Wort ist nicht in der Datenbank enthalten!");
printf("\nWenn Sie das Wort in die Datenbank hinzufuegen wollen, druecken sie 1!\n");
scanf("%d", &add);
if(add==1)
{
printf("\nDas deutsche Wort: ");
scanf("%s", liste[rem+1].wort);
printf("Das englische Wort: ");
scanf("%s", liste[rem+1].word);
// printf("%s, %s", liste[rem+1].wort, liste[rem+1].word);
// zum Prüfen
}
}
}
else
{
printf("\nGeben Sie ein deutsches Wort ein, das Sie uebersetzen wollen! ");
scanf("%s", suchen);
do
{
if(strcmp(suchen, liste[i].wort)==0)
{
printf("Englisch: %s ", liste[i].word);
gefunden=1;
break;
}
if(strcmp(suchen, liste[i].wort)==1)
{
gefunden=2;
}
i++;
}while(i<strlen(liste[i].wort));
if(gefunden==2)
{
printf("\nIhr Wort ist nicht in der Datenbank enthalten!");
printf("\nWenn Sie das Wort in die Datenbank hinzufuegen wollen, druecken sie 1!\n");
scanf("%d", &add);
if(add==1)
{
printf("\nDas deutsche Wort: ");
scanf("%s", liste[rem+1].wort);
printf("Das englische Wort: ");
scanf("%s", liste[rem+1].word);
}
}
}
}
...ist zwar ws nicht ganz perfekt, aber es ist zumindest etwas. :)
& nochmal danke, für die Hilfe. :D
Lg
BTW: ich hab das mit dem hinzufügen von Wörtern absichtlich "auskommentiert", da es noch unnötig ist, da es mir in das if sowieso nicht einsteigt...davor schmeißts mich immer raus...