C Problem mit globalem Array von Structs

  • Ersteller Ersteller s4ms3milia
  • Erstellt am Erstellt am
hi,

ich hab mal deinen Code in VS2010 bei mir eingegeben und getestet. (aber mit C++ da ich komischerweise nur C++ und C# zur auswahl hatte)

im Anhang kannst du erkennen das es bei mir mit deinem Code funktionierte ... zumindest zeigen beide Ausgaben die du erstellt hattest die selben Werte.

Ich habe nichts geändert ausser kleinigkeiten wegen C++ statt C.

Leider weis ich nicht wie C mit Structs ect umgeht ... :(
 

Anhänge

  • Unbenannt.JPG
    Unbenannt.JPG
    168,3 KB · Aufrufe: 164
Zuletzt bearbeitet:
hmm, wenn ich das Programm, so wie ich es gepostet habe, bei mir starte kommt 5x der Array nur mit "(0,0)->(0,0)" für eben die 5 Lösungen, die er in solve() findet, und wenn der Aufruf von solve() in main() beendet ist, wird korrekt die letzte Lösung geprintet.

Ich verstehe einfach nicht, warum die selbe Methode 2 unterschiedliche Ausgaben produziert. Ich kompiliere übrigens mit gcc 4.4.3..
 
Ich habe es gerade unter Ubuntu getestet, ebenfalls GCC 4.4.3.

Allerdings verstehe ich nicht wie es in einem anderen Compiler funktionieren kann. Ich habe den Code allerdings auch nicht 100% durchdrungen.

Ich denke das Problem ist hier:

Code:
doMove(move);
if (zug < 31) {
	if (solve(zug + 1)) {
		moveArray[zug] = move;
		return TRUE;
	}

Die Zuweisungen zu moveArray passieren erst nach den ganzen rekursiven solve() aufrufen. Wenn du in solve(31) ankommst wird folgendes ausgeführt:

Code:
	if(isSolution()) {
		printf("Solution found!\n");
//    TODO Why does this printMoveArray not work correct?
    printMoveArray();
		count++;
//		printf("Count : %d\n", count);
		if(count == 5){
			return TRUE;
		} else {
			return FALSE;
		}
	} else {
		return FALSE;
	}

Erst anschließend kehrt er aus solve(31) zurück und macht
Code:
		moveArray[zug] = move;
		return TRUE;
Durch das return können erst nacheinander die anderen [solve(30), solve(29), ...] ihren moveArray Eintrag setzen.

Erst danach macht es Sinn printMoveArray aufzurufen.
 
Vielen vielen Dank!!! Daran liegt es tatsächlich.
Rekursion kann einen schon wirklich verwirren :D
 
Zurück
Oben