Problem mit Feldvergleich



  • Guten Tag,

    ich muss ein Programm in C schreiben, mit dem ich 6 Zahlen von 1 - 49 über die Tastatur eingebe und es soll geprüft werden ob die Zahl die ich eingebe vorher schon mal getippt worden ist. Desweiteren soll es über einen Zufallsgenerator 6 verschiedene Zahlen, ebenfalls zwischen 1 und 49 ziehen und dann vergleichen nach wie vielen Ziehungen mindestens 3 "Richtige" vorhanden sind.

    Also das Programm funktioniert auch soweit super, nur hab ich ein kleines Problem mit der Eingabeüberprüfung! Und zwar wird immer wenn ich die "1" tippe angezeigt:

    "1 wurde bereits getippt"

    dabei habe ich sie vorher aber noch nicht getippt! Mit allen anderen Zahlen funktioniert es aber.

    Hier noch die beiden Funktionen des Programms die dafür zuständig sind:

    **int TippEingabe(int Tipp[6])
    {
    int i;
    int ZahlTipp=0;

    for(i=0;i<6;i++) {

    do {
    printf("Bitte den %d. Tipp eingeben (nur Zahlen zwischen 1 und 49): ",i+1);
    scanf("%d", &ZahlTipp);
    } while ((ZahlTipp<1) || (ZahlTipp>49));

    if(PruefEingabe(Tipp,ZahlTipp)==1) {
    printf("\n%d wurde bereits getippt!\n\n", ZahlTipp);
    i--;
    }

    Tipp[i] = ZahlTipp;
    }
    return Tipp[6];
    }**

    **int PruefEingabe(int Tipp[6], int ZahlTipp)
    {
    int i;

    for(i=0;i<6;i++) {
    if(Tipp[i]==ZahlTipp)
    return 1;
    }
    return 0;
    }**

    Schonmal vielen Dank für eure Hilfe 🙂



  • Hallo,

    wie hast du das übergebene Array 'Tipp' denn vorher initialisiert (evtl. stehen dort Zufallszahlen z.B. eine 1 drin)?

    Und wenn die PruefEingabe nicht erfolgreich ist, solltest du nicht

    Tipp[i] = ZahlTipp;
    

    ausführen (du überschreibst sonst den vorigen Wert bzw. schreibst beim ersten Wert sogar an Index -1 rein - da du ja den Indexzähler vorher dekrementiert hast).

    P.S. Und dein Code hier im Forum am besten in C-Tags setzen.



  • Also ich habe in der main() Methode das Feld ganz normal initialisiert.

    int Tipp[6];

    und dann:

    Tipp[6] = TippEingabe(Tipp);

    damit er die Funktion aufruft!

    Wie könnte ich das den anders realisieren außer mit

    Tipp[i] = ZahlTipp;

    muss ja irgendwie meine Werte in das Feld schreiben nachdem er geprüft hat ob die Zahl bereits im Feld vorhanden ist?!



  • while (1)
    {
        do {
            printf("Bitte den %d. Tipp eingeben (nur Zahlen zwischen 1 und 49): ",i+1);
            scanf("%d", &ZahlTipp);
            } while ((ZahlTipp<1) || (ZahlTipp>49));
    
        if(PruefEingabe(Tipp,ZahlTipp)==1)
            printf("\n%d wurde bereits getippt!\n\n", ZahlTipp);
        else
            break;
    }
    // hier ist ZahlTipp eine Zahl zwischen 1 und 49, die noch nicht getippt wurde
    

    Alternativ reicht auch ein continue hinter i--.



  • tob_ schrieb:

    Also ich habe in der main() Methode das Feld ganz normal initialisiert.

    int Tipp[6];

    und dann:

    Tipp[6] = TippEingabe(Tipp);

    damit er die Funktion aufruft!

    Damit ist das Feld nicht initialisiert, im Array steht irgendwelcher Datenmüll drin.
    Hier wäre es sinvoll, alle Elemente mit 0 zu initialisieren, das ginge so:

    int Tipp[6] = {0};
    

    Außerdem gibst du in der Funktion

    return Tipp[6];
    

    zurück, das überschreitet die Arraygrenze(der maximal zulässige Index ist 5) und hat undefiniertes Verhalten zu Folge,
    was zu Abstürzen des Programms etc. führen kann.
    Und selbst wenn der Index gültig wäre, würde nur ein Wert zurückgegeben werden, was vermutlich auch nicht deiner Vorstellung entspricht.

    D.h. fürs Einlesen der Zahlen brauchst du keinen Rückgabewert.

    void tipp_eingabe ( int Tipp[6] )
    {
    	int i;
    	for ( i = 0; i < 6; i++ )
    		Tipp[i] = i+1;
    }
    
    int main(void)
    {
    	int Tipp[6] = {0};
    	int i;
    	tipp_eingabe ( Tipp );
    	for ( i = 0; i < 6; i++ )
    		printf ("%d ", Tipp[i] );
    	return 0;
    }
    


  • Vielen Dank für eure Hilfe, mein Problem ist jetzt gelöst 🙂


Anmelden zum Antworten