Debugging probleme, Array mit Array vergleichen



  • Hi,
    bin Student für Kraftfahrzeugelektronik und soll ein Lotto-Programm schreiben,
    was die Zahlen vom Benutzer einliest und mit einem random Lottoschein vergleicht. Jeweils nur 1 Ziehung nicht mehrfach.

    Es funktioniert alles, bis auf die generierung der Zahlen. Es passiert hin und wieder das Zahlen doppelt gewählt werden trotz Prüffunktion.

    Code für Generierung der Zahlen:

    srand((unsigned int)time(NULL));
    	for (i=0;i<8;i++)
    	{
    		do
    		{
    		Zahlenrand[i]=(rand() % 50);
    		}while(tester(Zahlenrand[i],Zahlenrand)==0);
    	}
    

    Der Code des testers:

    int tester(int Wert,int testera[])
    {
    	for(k=0;k<8;k++)
    	{
    		if (Wert==testera[k])
    		{
    		return 1;
    		}
    	}
    	return 0;
    }
    

    Meines erachtens sollte dann eine Doppelausgabe ausgeschlossen sein, aber fehlanzeige. Ich kann im Visual Studio leider nur Prozedurschritt debugging machen weil Einzelschritt zum beispiel bei dem srand die datei time.inl aufruft und in deren code weiterfährt. Falls da Teile von ner anderen bibliothek auftauchen ruft der die auf und so weiter. Was mir die Fehlersuche in dem Teil doch erschwert.

    Hoffe ihr könnt mir einen Tipp geben um dieses Problem zu lösen.

    Mfg



  • Für Einzelschritt dann eben F10 statt F11.

    Deine Bedingungen sind falsch:
    tester() wird immer 1 zurückgeben, da der Wert, den sie sucht, ja bereits im Array steht.

    Setz' das o.g. F10 ein, und Du wirst es finden.



  • ich verstehe, da er den wert der ja reingespeichert wurde auch wieder findet.
    Okay werde mich da an eine Lösung machen. Aber das mit F10 geht nicht wie gesagt der öffnet dann wahlweise andere Dateien und macht nicht im eigtl code weiter.
    Prozdurschritt ja
    Einzelschritt nein

    Mfg



  • Nuja, bei mir(VS2010) geht F11 in die Funktionen rein und F10 geht drüberweg (das ist m.E. der Prozedurschritt).
    Aber Du kannst die Einstellungen ja ändern wie Du's lustig bist.



  • Vielen Dank habs hinbekommen.
    Sieht nun so aus. Gibt es sinnvollere Varianten ? Oder kann man das mit gutem Gewissen abnicken?

    int tester(int Wert,int Zahlenrand[],int i)
    {
    	for(k=0;k<8;k++)
    	{
    		if (i!=k)
    		{
    			if (Wert==Zahlenrand[k])
    			{
    			return 0;
    			}
    		}
    	}
    }
    

    Schonmal im voraus Frohe Weihnachten


  • Mod

    Oder kann man das mit gutem Gewissen abnicken?

    Nein. Was gibt tester zurück, wenn die Schleifen durchlaufen? Warum überhaupt int und nicht bool?

    Piepmatz schrieb:

    Gibt es sinnvollere Varianten ?

    Ja.

    Deine jetzige Testfunktion (mit obiger Anmerkung verbessert) ist äquivalent zu:

    bool tester(int Wert,int Zahlenrand[])
    {
     return (std::cout(Zahlenrand, Zahlenrand+8, Wert) != 1);
    }
    

    Wobei die magische 8 auch sehr doof ist.

    Aber es geht sowieso besser: Schließ einfach gleich aus, dass Zahlen überhaupt doppelt vorkommen können! Das ist nicht schwer. Such hier im Forum mal danach, du wirst bestimmt an die 50 Threads zu Lottozahlen finden.


Anmelden zum Antworten