kleines schleifen Problem...
-
Ich hab ein Lotto Programm geschrieben mit structs und wenn ich die Tips mit der Ziehung vergleichen will bekomme ich immer von Spieler 2 doppelt so viele Treffer wie von Spieler 1 bekomme obwohl manche nicht ma EINE richtige haben...
Ich bin verzweifelt und weiss nicht mehr weiter:
int count = 0; for(int l=0;l<player.spieleranzahl;l++)//für jeden Spieler 1x { for (int k=0;k<y;k++)//solange k < Anzahl Tipscheine { for (int i=0;i<7;i++)//7 Tips abfragen { for (int j=0;j<7;j++)//Ziehung abfragen { if (player.tip[i][k] == player.ziehung[j][1]) {count++;} } } } cout << "Spieler " << l+1 << ": " << player.name[l] << endl << endl << "Du hast " << count << " Richtige Treffer auf deinen Scheinen!"; cout << endl << endl; }
wobei k soweit gehen soll bis zur anzahl der gewünschten Tipscheine...Immoment wird auch für beide Spieler ausgewertet aber jeweils mit dem letzten Array´s da die von Spieler eins überschrieben werden...
-
Geh schrittweise mit dem Debugger durch, dann findest du den Fehler sicher schnell. Übrigens solltest du an deiner Einrückung arbeiten.
-
danke für die schnelle antwort, schrittweise hab ich es auch schon versucht aber der count wächst exponential, keine ahnung warum...
das mit dem einrücken höre ich öfter aber unter xcode werde die klammern beim darüber fahren schön gehighlitet und deshalb schreib ich sie immer übereinander, oder meintest du was anderes? ich weiss nicht wie ich sonst einrücken sollte, aber vielleicht kannst du mir ja mal sagen was du anderst machen würdest?
bei den Superzahlen der vergleich hab ich dasselbe Problem...
-
jerry1 schrieb:
schrittweise hab ich es auch schon versucht aber der count wächst exponential, keine ahnung warum...
Kann nicht sein, count wird immer um eins erhöht. Das hättest du beim schrittweisen Debuggen sehen müssen.
jerry1 schrieb:
das mit dem einrücken höre ich öfter aber unter xcode werde die klammern beim darüber fahren schön gehighlitet und deshalb schreib ich sie immer übereinander, oder meintest du was anderes?
Na ja, ich meine einfach nur, dass du z.B. die äußere for-Schleife nicht richtig (bzw. einfach nicht) eingerückt hast. Das passt nicht ganz zum Rest.
Ich persönlich würde auch unbedingt dafür sorgen, dass die geschweiften Klammern selbst nicht für ihren Block eingerückt werden, sondern nur alles dazwischen. Wenn du das anders magst, ist das natürlich ok, aber ich finde es lesbarer, wenn zwischen den Klammern quasi nur leerer Raum ist.
if(1) { //mein Favorit code... } if(1) //sowas in der Art machst du, Klammern und Code im Block sind auf einer vertikalen Ebene { code... } if(1) //würde ich dir empfehlen { code... }
Also ich oersönlich kann deine Einrückung ganz schlecht lesen. Aber wie gesagt, letztlich musst du es wissen.
-
Morgen!
hmmm also denn hier
if(1) { //mein Favorit code... }
finde ich nicht gut weil man die klammern so nur schwer zusammenhalten kann(für mich), hab dass schon öfter so gesehen, aber mir ist es zu unübersichtlich
[/cpp]
if(1) //sowas in der Art machst du, Klammern und Code im Block sind auf einer vertikalen Ebene{ code... }
ja das mag ich schon eher da meine programme oft sehr verschatelt sind und ich sonst schnell ärger mit den klammern bekomme...
if(1) //würde ich dir empfehlen { code... }
werd ich mal versuchen... wenn du willst kannst du ja mal einen blick auf mein proggi werfen dann kannste mir ja vielleicht sagen ob das so sinn macht wie ich geschachtelt habe...
sollte ich vielleicht ein count array bauen da ich ja eh mehrere zähler brauche? für jeden Spieler? trotzdem komme ich nicht dahinter wieso der in der schleife selbst bei keiner richtigen weiter hoch zählt...
-
meinst du nicht, das die inneren beiden schleifen zu einer zusammengefasst werden sollten?
was das count-problem betrifft: du musst für jeden spieler die variable 0 setzen.
mfg,
t.
-
sry aber wie meinst du das? die beiden inneren sind doch von der äußeren zusammengefasst...
ja das hab ich auch gemerkt, der hat ja nur ein platz für beide spieler, immoment zählt er auch nur die letzten tips des letztens spielers des array aus weil ich es auch nicht schaffe tip, tipschein und spieler irgendwie zusammenzufassen so dass jeder tipp auf den unterschiedlichen tipscheinen pro spieler mit der ziehung verglichen wird
-
[quote="Jerry!"]sry aber wie meinst du das? die beiden inneren sind doch von der äußeren zusammengefasst...
[quote="Jerry!"]
hab mich wohl etwas unglücklich ausgedrückt. wenn du 6 zahlen vergleichst, braucht jedenfalls die innerste schleife links und rechts denk gleichen index (hier: j) für die zahlenvergleiche.
-
hoffe, hab nicht zu viele patzer drin. der index wäre hier das 'l'.
muss jetzt erstmal los, ungetestet und ohne allokierte strukturmember:#include "stdio.h" typedef struct { int n; // anzahl tipps int a[6]; }_6aus49; typedef struct { int n6aus49; // Anzahl der Tippscheine. _6aus49* pTipp6aus49; // getippte zahlen des spielers _6aus49* pErgebnis6aus49; // alle a z.b. mit -1 initialisieren. }Spieler; int main() { Spieler S[2] = {0}; int i,j,k,l; int ziehung6aus49[] = {1,2,3,4,5,6}; for ( i=0; i<2; i++ ) // jeder spieler { for ( j=0; j<S[i].n6aus49; j++ ) // für jeden tippschein eines spielers { for ( k=0; k<j<S[i].pTipp6aus49[j].n; k++ ) // für jeden tipp { for ( l=0; l<6; l++ ) // für jede gezogene zahl ( hier: aus 49 ) { if ( S[i].pTipp6aus49[k].a[l] == ziehung6aus49[l] ) S[i].pErgebnis6aus49[k].a[l] = ziehung6aus49[l]; } } } } return 0; }
gruß, t.