Daten aus Textdatei in 2D-Array einlesen --> Hat sich geändert!!!
-
Hallo miteinander
studiere Informatik im ersten Semester.
Aufgabe: Programmiere einen Sudoku-Solver.An alle die diesen Beitrag vor der Änderung gelesen haben!
Ich bin zu einer Lösung gekommen, funktioniert.Doch jetzt bin ich schon vor dem nächsten Problem.
Ich erkläre nochmal kurz alles....Habe eine Textdatei mit 9 Zeilen und 9 Spalten. In diesen Spalten und Zeilen befinden sich Leerzeichen, und Zahlen von 1-9. Ich lese die Textdatei aus und übergebe die Werte in ein 2D-Array --> funktioniert. Vor der Übergabe in das Array findet noch eine Prüfung statt lade_sudoku() ob Leerzeichen in der Datei vorhanden sind, falls ja soll er sie durch Nullen erstetzen --> funktioniert auch.
Problem: Wenn ich das gefüllte Array ausgebe oder in eine neue Textdatei schreibe hängt er eine Null zuviel dran und dann verschriebt sich die ganze Matrix...Ich denke es hat was mit dem Zeilentrenner zutun....
Hier der Quellcode:
[/code]//---------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
//---------------------------------------------------------------------------//Prototypen
void sudoku_laden(int grid[9][9]);
void sudoku_speichern(int grid[9][9]);//---------------------------------------------------------------------------
//Funktionen sudoku_laden
void sudoku_laden(int grid[9][9])
{
int i = 0;
int j = 0;
char temp;
FILE *datei;datei = fopen("C:\\sudoku1_test.txt", "r");
if(datei != NULL)
{
printf("\n\tDatei konnte erfolgreich geoeffnet werden!\n");
for(i=0; i<9; i++)
{
for(j=0; j<9; j++)
{
fscanf(datei, "%c", &temp);
grid[i][j] = atoi(&temp);
if(grid[i][j] == 32)
{
grid[i][j] = 0;
}
}
}
fclose(datei);
}
else
{
if(datei == NULL)
{
printf("\n\tFehler beim Oeffnen der Datei!");
}
}
sudoku_speichern(grid);
}
//---------------------------------------------------------------------------//Funktion sudoku_speichern
void sudoku_speichern(int grid[9][9])
{
int i = 0;
int j = 0;
FILE *datei;datei = fopen("C:\\sudoku_geloest.txt", "w");
if(datei != NULL)
{
for(i=0; i<9; i++)
{
for(j=0; j<9; j++)
{
fprintf(datei, "%i", grid[i][j]);
}
fprintf(datei,"\r\n");
}
fclose(datei);
}
else
{
if(datei == NULL)
{
printf("\n\tDatei konnte nicht gespeichert werden!");
}
}
//Ausgabe in der DOS-Boxfor(i=0; i<9; i++)
{
for(j=0; j<9; j++)
{
printf("%d", grid[i][j]);
}
printf("\n");
}
}
//---------------------------------------------------------------------------void main()
{
//Variablendefinitionint feld[9][9] = {0};
//Programminformationen
printf("\n\n\tSudoku-Solver");
//Programm
sudoku_laden(feld);
getch();
}
//---------------------------------------------------------------------------
[code="c"]Wie bereits erwähnt, meine Vermutung -->Zeilentrenner....Bin mir aber nicht sicher.
Könnte mir bitte jmd. weiterhelfen ?
Mfg Optimus
-
Da du Zeichenweise liest, musst du bedenken, dass auch das \r und \n ein Zeichen ist.
Aber auch dein lesen ist nicht richtig.
atoi erwartet einen Nullterminierte Zeichenkette. Du übergibst aber nur die Adresse von einem Zeichen.
Weißt du, welchen Wertatoi
für ein Leerzeichen zurückgibt?
Jedenfalls steht nach demgrid[i][j] = atoi(&temp);
keine 32 ingrid[i][j]
.Und nutze bitte beim nächsten mal die Code-Tags. Code markieren und auf den Button unter dem
klicken.