Ausgabe in *.txt Datei & Struct

simplex

simplex

[Versuchstier]
Hallo liebe Community! ;)

Ich stehe vor einem kleinen Problem. Gegeben ist mein n-Damen auf dem Schachbrett-Programm. Nun stehe ich vor der Hürde, wie ich die "gesamte" Ausgabe in eine *.txt Datei speichern kann. Das Programm an sich funktioniert - aber seht selbst, er speichert mir nur komische Zeichen. Wäre super, wenn sich das jemand anschauen könnte.

Mein zweites Problem ist der Einbau eines "Struct".

Vllt. hat ja jemand ein paar Tipps! :) Wäre super..muss das Ding nämlich bald abgeben und ich bin mit meinem Latein am Ende!

Gruß
micha

Code:
#include <stdio.h>
#include <stdlib.h>						// Die Definitionsdatei <stdlib.h> vereinbart Funktionen zur Umwandlung von Zahlen, 
										// für Speicherverwaltung und ähnliche Aufgaben.
#include <conio.h>

int feld[10][10];						//maximal 8x8 Feld, da es sonst zu viele Lösungen gibt

int anzahl_felder;						// Größe des Schachbretts
int anzahl_loesungen=0;					// Gibt Anzahl der Lösungen an, wird beim Start auf 0 gesetzt


void initialisiere_feld(int start)

{

for (int a=start; a<=anzahl_felder; a++)
for (int b=0; b<=anzahl_felder; b++)
	if (start>=0) feld[a][b]=0;

}


int zaehle_damen()						//Funktion durchläuft jedes einzelne Feld
{
	int count=0;						//Zählt die Damen, die sich in dem Feld befinden
for (int a=0; a<=anzahl_felder; a++)
for (int b=0; b<=anzahl_felder; b++)
if (feld[a][b]==1)count++;

return count;							//Anzahl der "gefundenen" Damen wird an Funktion zurückgegeben
}


int horizontal(int x, int y)			// Durchläuft als erstes die Horizontale
{
int ergebnis=0;							//keine Kollision außer wenn:


	for (int i=0; i<=anzahl_felder; i++)
	{
		if (feld[i][y]==1)				//y bleibt hier gleich, da die Funktion nur eine Horizontale durchläuft 
										//==1:bedeutet dass sich in der Horizontale eine Dame befindet
				{
					ergebnis=1;			//Kollision! Abbruch
					break;
				} 

}

return ergebnis;
}


int vertikal(int x, int y)
{
int ergebnis=0;


	for (int i=0; i<=anzahl_felder; i++)
	{
		if (feld[x][i]==1)				//x bleibt gleich, da hier nur eine Vertikale durchlaufen wird
				{
					ergebnis=1;			 //Kollision! Abbruch
					break;
				} 
	
}

return ergebnis;
}


int diagonale1(int x, int y)			//Diagonale von rechts unten nach links oben
{
int ergebnis=0;
int x1=x;
int y1=y;


for (int i=-anzahl_felder; i<=anzahl_felder; i++)
{

x1=x+i;									// da z.B. die Diagonalen von (2,2)  
y1=y+i;									// (1,1),(3,3) und (4,4) sind

if ((x1>anzahl_felder)||(y1>anzahl_felder)||(i==0)||(x1<0)||(y1<0)) 
continue;								//Bedingung damit die Funktion nicht über den Spielfeldrand läuft, 
										//bzw nicht das Feld (x,y) prüft


	if (feld[x1][y1]==1)
				{
					ergebnis=1;			//Kollision! Abbruch
					break;
				} 

		else 
			
			ergebnis=0;					//keine Kollision
}

return ergebnis;
}


int diagonale2(int x, int y)			//Diagonale von unten links nach oben rechts
{
int ergebnis=0;
int x1=x;
int y1=y;
int i=1;


for (i=1; i<=anzahl_felder; i++)
{

x1=x+i; //nach oben
y1=y-i;
if ((x1>anzahl_felder)||(y1>anzahl_felder)||(x1<0)||(y1<0)) continue; 


if (feld[x1][y1]==1)
				{
					ergebnis=1;			//kollision gefunden! Abbruch
					break;
				} 

	
}


for (i=1; i<=anzahl_felder; i++)
{
x1=x-i; //nach unten
y1=y+i;
if ((x1>anzahl_felder)||(y1>anzahl_felder)||(x1<0)||(y1<0)) continue; //bedingung für über den spielfeldrand-->überspringen


if (feld[x1][y1]==1)
				{
					ergebnis=1;			//Kollision! Abbruch
					break;
				} 


}



return ergebnis;
}


int ueberpruefe_dame(int x, int y)
{
int ergebnis=0;



if ((horizontal(x,y)+vertikal(x,y)+diagonale1(x,y)+diagonale2(x,y))==0) ergebnis=0; else {ergebnis=1;} //überprüft ob irgendwo eine Kollision ist


return ergebnis;
}



void zeichne_feld(void)					//Ausgabe
{

anzahl_loesungen++;
printf("\tLoesung Nr.%d\n\n\t",anzahl_loesungen);
for (int a=0; a<=anzahl_felder; a++)
{
for (int b=0; b<=anzahl_felder; b++)
if (feld[b][a]==0) printf("%c ",254); else printf("%c ",1);
printf("\n\t");
}

printf("\n-------------------------------------------------\n");
}


void speicher()							//Speichert die Ausgabe. 
{

FILE * datei;
datei = fopen ("feld.txt", "a");
anzahl_loesungen++;
fprintf(datei, "\tLoesung Nr.%d\n\n\t",anzahl_loesungen);
for (int a=0; a<=anzahl_felder; a++)
{
for (int b=0; b<=anzahl_felder; b++)
if (feld[b][a]==0) fprintf(datei, "%d ",0); 
	else fprintf(datei,"%d ",1);
fprintf (datei, "\n");
}

fclose(datei); 
 
}
/*
int a=0;  
int b=0;  
  
  
  
FILE * datei;  
datei = fopen ("feld.txt", "a");  
  
for (a=0; a<9;a++ ) {  
  
for (b=0; b<9; b++) {  
  
fprintf (datei, "%d", (feld[a][b]));}  
  
  
fprintf (datei, "\n");  
  
} 

*/
void dame(int spalte)
{
	if (spalte<=anzahl_felder){
for (int a=0; a<=anzahl_felder; a++)
	if (ueberpruefe_dame(spalte,a)==0) {feld[spalte][a]=1; dame(spalte+1);}

	if (zaehle_damen()==(anzahl_felder+1)){zeichne_feld(); }  //Alle Damen gesetzt -->eine Lösung gefunden!!

	initialisiere_feld(spalte-1);

}
}


void main()
{
printf(" Herzlich Willkommen zu dem Projekt n-Damen auf dem Schachbrett.\n\n");
printf(" Im folgenden Schritt muessen Sie ihre Spielfeld-Groesse x * x festlegen. \n\n"); 
printf (" Sie koennen fuer x die Zahlen zwischen 4 und 10 verwenden. \n\n");              //Eingabe durch Benutzer

scanf("%d",&anzahl_felder);
anzahl_felder--;													// da die Nummerierung bei 0 anfängt (8 Felder --> 0-7)
initialisiere_feld(0);
dame(0);

speicher();
getch();
}
 
Formatier den Code mal so das man die Kommentare lesen kann
 
Kann man doch, wenn man nach rechts scrollt :)
 
Schau Dir mal in der Funktion 'zeichne_feld()' das 'printf("%c ",254)' und das 'printf("%c ",1)' genauer an.
 

Ähnliche Themen

C Code Hilfe!!! gesucht bei Dezimalzahl in Binärzahl for loop

Unix Webserver mit HTML Seite erstellen

Crontab und Scripts - Problem

Port generieren, wenn nicht dann

Prozesskommunikation mit PIPES - wie funktioniert das?

Zurück
Oben