Wörterbuch programmiern in C

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

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

Anja95 
Fragesteller
 24.06.2012, 21:55

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 100

typedef 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

0

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...