Lesen Sie eine Textdatei in 2D-array
Also derzeit habe ich einen funktionierenden code, der in der Lage ist zu Lesen in einem text-Datei, die enthält ein 9x9-Brett jeder slot im 2D-array ist eine Zahl zwischen 1-9; jedoch, einige Ablagefächer haben ein '-' Zeichen vermischt, in die Sie nach dem Zufallsprinzip. Der einzige Weg, ich fand, dass ich konnte Lesen Sie alle Zeilen erfolgreich und drucken Sie Sie mit einem char sudoku[9][9]
aber so stark wirkt sich auf andere Teile meines aktuellen Zuordnung.
Die Datei sollte nur werden 9 aufeinander folgende Zeilen etwa so:
123-56-89
4561-3--9
etc...
Könnte jemand mir zeigen, ein Weg, konnte ich erfolgreich Scannen in die text-Datei-Inhalt in einen INTEGER-2D-array anstelle eines char?
int main(){
int i, j;
char sudoku[9][9];
char filename[100];
printf("Please enter file name (W/O .txt): ");
scanf("%s", filename);
FILE *file1 = fopen(filename, "r");
for(i=0;i<9;i++){
for(j=0;j<9;j++){
fscanf(file1,"%c\t", &sudoku[i][j]);
}
}
for(i=0;i<9;i++){
for(j=0;j<9;j++){
printf("%2c", sudoku[i][j]);
}
printf("\n");
}
fclose(file1);
}
\t
im fscanf()
format wahrscheinlich nicht tun, was Sie erwarten. OTOH, solange Sie nicht geben /dev/tty
oder etwas ähnliches wie der name der Datei, es wird nicht zu viel Schaden (es ist teuflisch, verwenden Sie nachgestellte Leerzeichen in einem string format, wenn die Eingabe interaktiv). Auf der ganzen obwohl, Sie könnte verwenden " %c"
mehr sicher.Ja die Datei die überprüfung nicht in dieses hier ist nur ein kleines segment der Haupt-code, die ich einfach nicht scheinen, um in der Lage sein, um dieses segment der code funktioniert wenn ich ein integer-array statt einem char-array
InformationsquelleAutor Titan | 2014-05-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Lesen Sie die Zeichen in ein Zeichen, konvertieren Sie dann eine geeignete ganze Zahl. Beachten Sie, dass der code nicht egal, wenn jeder Charakter aus der matrix-ist getrennt von der nächsten durch ein Dutzend leere Zeilen und es werden 20 Leerzeichen vor dem Zeichen, oder wenn Sie die gesamte Eingabe mit 81 Zeichen auf einer einzigen Zeile oder jede andere variation. Solange es mindestens 81 non-white-space-Zeichen in der Datei, es wird OK sein.
InformationsquelleAutor Jonathan Leffler
Ich bevorzuge eine standard-Bibliothek-Funktion, wo möglich ist, um die integer-Konvertierung. Hier bin ich mit atoi(). Wenn es sieht, eine Ziffer, wird es wieder seinen integer-Wert. Wenn ist sieht alles andere, einschließlich der " - " - Zeichen, es wird 0 zurück. Wenn fscanf() läuft aus Zeichen, atoi() auch 0 zurückgeben (da wir initialisieren s auf "0" in jeder iteration), effektiv die Polster aus dem rest des Arrays mit dem '-' Zeichen. (Beachten Sie, dass s ist technisch gesehen ein string eher als ein Zeichen, da das ist, was atoi() erwartet als Eingabe, aber fscanf() überschreiben nur seine erste byte, in denen der Charakter gespeichert ist.)
InformationsquelleAutor Ted C