fputs in Schleife
-
Hallo zusammen,
mein Code behandelt das nDamen-Problem.
Ich möchte, das alle gefundenen Lösungen in eine .txt geschrieben werden.
Der Output sieht z.B. so aus:
[ ][ ][ ][Q]
[ ][Q][ ][ ]
[Q][ ][ ][ ]
[ ][ ][Q][ ]Hier mein bisheriger Code:
int board[20]; void printSolution(int iChessBoardLength) { int i, j, c; int x =25, y=6; FILE* psFile; psFile = fopen(nQueensStr.acFilename, "w+"); // If-else which checks if stepmode is chosen if (nQueensStr.AppMode == 0) { _clrscr(); printMenu(); printStatus(); nQueensStr.AppMode = 0; // For-loop which prints the board until maxlength is reached for (i = 1; i <= iChessBoardLength; ++i) { _gotoxy(x, y); y++; printf("\n"); // For-loop which prints out the solved board configuration for (j = 1; j <= iChessBoardLength; ++j) { if (board[i] == j) printf("[Q]"); else printf("[]"); } } // waits for userinput everytime a solution was successfully printed c = _getch(); // checks if pressed key is a 's' and handles it accordingly if (c == 's') { handleInputStep(); } } else // else part which is triggered if continious mode is chosen { printStatus(); } printf("\n\n"); return 0; } void queen(int row, int iChessBoardLength) { int c; int column; for (column = 1; column <= iChessBoardLength; ++column) { if (isPositionValid(row, column)) { if (kbhit()) { char c = getch(); if (c == 's') { _clrscr(); exit(handleInputCont()); } } board[row] = column; //no conflicts so place queen if (row == iChessBoardLength) //dead end { nQueensStr.iCountOfSolutions++; printSolution(iChessBoardLength); //printing the board configuration } else //try queen with next position { queen(row + 1, iChessBoardLength); } } AppTimeStr.lFinishTime = clock(); (double)AppTimeStr.dRuntime = AppTimeStr.lFinishTime - AppTimeStr.lStartTime; _gotoxy(11, 22); printf("%.1lf", AppTimeStr.dRuntime); } return 0; } int isPositionValid(int row, int column) { int i; for (i = 1; i <= row - 1; ++i) { // Checking columns and digonals for validility if (board[i] == column) return 0; else if (abs(board[i] - column) == abs(i - row)) return 0; } return 1; }
Ich kenne die Funktionen fputs und fopen usw, habe die aber bisher nur bei simplen Sachen angewendet.
Ich verstehe nicht, wie ich mit fputs das Brett so wie oben in die Text bekomme, hat jemand n Anstoß für mich?
Danke schon mal.
-
es gibt eine funktion namens fprintf, mit der du wie mit printf irgendwas in eine datei schreiben kannst.
-
In C fangen Arrays immer beim Index 0 an. Immer.
-
okay, fprintf ist ne Idee, damit bekomme ich es aber nur im gleichen Modul hin.
Ich möchte am Liebsten, dass die Funktion, die es in die Txt-Datei schreibt in einem eigenen Modul steht, ist das realisierbar ohne das ich die ganze Berechnung nochmals durchführen muss?
Danke euch!
-
Wo möchtest du die Funktion denn aufrufen?
Findet deine Algorithmus alle möglichen Stellungen oder nur die Erste?
Warum hat queen als
void
-Funktion einreturn
0;?
(Da muss eine Compilerwarnung kommen, wenn nicht, ist dein Compiler falsch eingestellt)
-
wie meinst du das mit eigenem modul? also du kannst natürlich auch einfach ein array erstellen:
//für 8*8 felder, bei kleineren oder größeren spielfeldern die 8 eben entsprechend anpassen char array[8][3 * 8 + 1];
dann einfach dort alles hinein schreiben:
strcpy(array[0][0], "[Q]"); // 1. Reihe 1. Feld strcpy(array[0][3], "[ ]"); // 1. Reihe 2. Feld strcpy(array[7][21], "[Q]"); // 8. Reihe 8. Feld
und mittels fprintf in die datei schreiben:
for(i = 0; i < numrows; i++) { printf(myfile, "%s", array[i]); }
das array musst du dann nur an die entsprechenden funktionen übergeben.
-
DirkB schrieb:
Wo möchtest du die Funktion denn aufrufen?
Findet deine Algorithmus alle möglichen Stellungen oder nur die Erste?
Warum hat queen als
void
-Funktion einreturn
0;?
(Da muss eine Compilerwarnung kommen, wenn nicht, ist dein Compiler falsch eingestellt)Die compilerwarnung kommt, ist mir auch bereits aufgefallen und habe es angepasst.
Danke für eure Hilfe!
Ich habe es nun so gelöst, das immer wenn die printSolution funktion aufgerufen wird zeitgleich die selbe Funktion nur mit fprintf statt printf.
Ich hatte nur immer einen debug assertion error bekommen, da der file pointer = null war...took me a while..
danke trotzdem!