Lesen der Daten aus der Datei in c
Ich habe eine txt-Datei mit dem Namen prob, die enthält:
6 2 8 3
4 98652
914
143 789
1
527 146
85
1 74 8
7 6 3
Jede Zeile hat 9 chars und es gibt 9 Linien. Da kann ich nicht machen, ein string-array in c, im werden mit einem zweidimensionalen array. Vorsichtig läuft der code, Endlosschleifen sind Häufig, und es gibt seltsame Ausgabe. Ich bin auch neugierig, wo hört es auf der Aufnahme in die Schnur? bis newline?
das erwartete Ergebnis für jeden "retten": 6 2 8 3
oder watever der Zeile enthalten.
#include <stdio.h>
FILE *prob;
main()
{
prob = fopen("prob.txt", "r");
char grid_values[9][9];
char save[9];
int i;
for (i = 0; (fscanf(prob, "%s", save) != EOF); i++)
{
int n;
for (n = 0; n <= 9; n++)
{
grid_values[i][n] = save[n];
printf("%c", grid_values[i][n]);
}
}
fclose(prob);
}
Ein paar Dinge: es sollte
int main()
und Sie sollten return 0;
am Ende, und FILE *prob;
erklärt werden sollte in main()
(kein Grund, es zu machen, externe).InformationsquelleAutor zetologos | 2011-05-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
wenn Sie
fscanf
, er wird angehalten, nachdem ein space-delimiter..versuchen
fgets
es tun.. Es liest Zeile für Zeile..detail
fgets
Nutzung kann hier gefunden werden:http://www.cplusplus.com/reference/clibrary/cstdio/fgets/
--bearbeitet--
hier ist die zweite
Ich denke, es wird gut funktionieren..
sorry, mein Fehler.. ich habe vergessen, dass fgets gibt einen Zeiger.. also, versuchen Sie, diese.. 'while(!feof(prob)) { fgets(speichern, sizeof(speichern), prob); .....}'
InformationsquelleAutor Bobby Stenly
Dieser sieht aus wie ein Hausaufgaben problem, also werde ich versuchen, Ihnen einige gute Ratschläge.
Lesen Sie zuerst die Beschreibung der fscanf-Funktion und die Beschreibung von "%s" - Konvertierung.
Hier ist ein Ausschnitt aus der Beschreibung, die ich für "%s":
Hier sind die zwei wichtigsten Punkte:
Nun, dieses Problem zu beheben, Lesen Sie Zeichen in ein zwei-dimensionales array: Sie müssen eine andere Funktion. Schauen Sie durch die Liste der C stdio-Funktionen.
Nichts sehen, nützlich klingende?
Wenn Sie noch nicht, ich gebe Ihnen einen Hinweis: fread. Es wird gelesen, eine Feste Anzahl von bytes aus dem input-stream. In Ihrem Fall könnte man sagen, dass es zu immer lese 9 bytes.
Dass würde nur funktionieren, wenn jede Zeile garantiert zu sein Polster aus 9 Zeichen.
Anderen Funktion fgets. Wieder, Lesen Sie sorgfältig die Funktion der Dokumentation. fgets ist eine weitere Funktion fügt ein abschließendes null. Allerdings! In diesem Fall, wenn Sie sagen, dass fgets eine Größe von 9, fgets liest nur 8 Zeichen und schreiben des abschließenden null-wie der 9. Charakter.
Aber es gibt noch einen anderen Weg! Zurück zu fscanf!
Wenn man sich die anderen umwandlungsspezifikationen, die Sie nutzen könnten "%9c" zu Lesen ist 9 Zeichen. Wenn Sie diese Betrieb, es nicht fügen Sie eine abschließende null des Strings.
Sowohl mit fread und fscanf "%9c" wenn Sie wollte, die 9 bytes, die als string in den anderen Funktionen, wie printf, würden Sie brauchen, um Ihren Puffer 10 bytes und nach jedem fread oder fscanf Funktion, die Sie benötigen würde, zu schreiben
save[9] = '\0'
.Immer Lesen Sie die Dokumentation sorgfältig durch. C-string-Funktionen manchmal machen es auf Ihre Weise. Aber nicht immer.
(fscanf(prob, "%9c", save) != EOF)
Gibt mir etwas in der Nähe die Antwort, aber jetzt einige seltsame chars sind ausdrucken. Seine nicht-Druck neue Zeile ist?InformationsquelleAutor Zan Lynx