2016-08-01 22 views
0

gemacht habe Ich bin neu in C, ich versuche nur eine einfache Textdatei zu lesen, die ich in C erstellt habe. Ich habe diese Datei erstellt, indem ich auf neu -> leere Datei -> Speichern klicke an meinen gewünschten Speicherort und dann die Dateierweiterung (.txt) hinzufügen die Textdatei enthält eine Beispiel Sudoku Board und der vollständige Dateiname ist sudokuchar.txt.Wie man aus einer Textdatei liest, die ich in C

Der Code, den ich aus der Datei zu lesen und drucken ist:

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    FILE *fpointer = fopen("sudokuchar.txt", "r"); 
    char input[100]; 
    while(fgets(input,100,fpointer)) 
    { 
     printf("%s",input); 
    } 
    fclose(fpointer); 
} 

so, wenn ich kompilieren das Programm nichts und kehrt drucken -1. Ich nehme an, etwas stimmt nicht mit der Datei, die ich versuche zu lesen? Wenn jemand helfen könnte, würde es sehr geschätzt werden.

+1

"mein gewünschter Standort" - es sei denn, dieser gewünschte Standort ist auch das aktive Arbeitsverzeichnis für Ihren Prozess, wenn er ausgeführt wird, wird der gesendete Code die Datei nicht finden und 'fopen' wird NULL zurückgeben. Wenn ich das nicht überprüfte und eher irrtümlicherweise davon ausging, dass es einfach funktionierte, übergab ich NULL als Dateizeiger an 'fgets' und dann * undefiniertes Verhalten *. Es scheint, dass einige Fehlerüberprüfungen und Änderungen der Laufzeitstartkonfiguration in Ordnung sind. – WhozCraig

+0

also wie speichere ich die Datei im aktiven Arbeitsverzeichnis? – katDouglas

+0

Beachten Sie auch, 'main()' ist eine Funktion vom Typ 'int' und sollte entweder 0 oder einen positiven * 8-bit * -Wert an die Shell beim Beenden geben (zB' return 0; 'falls kein Fehler,' 1- 255 'bei Fehler). Beachten Sie auch, dass die richtigen Deklarationen für 'main' entweder' int main (void) {... 'oder' int main (int argc, char * argv []) {... 'sind (Sie sehen das Äquivalent' char ** argv' statt '* argv []', und es gibt zusätzliche nicht-portable Argumente, die von einigen Compilern akzeptiert werden). Dies verursacht nicht den Lesefehler (ein 'fopen'-Fehler ist am wahrscheinlichsten), aber es hilft, die Grundlagen richtig zu bekommen. –

Antwort

1

Überprüfen Sie immer die Rückgabewerte fopen und andere Standardbibliotheksaufrufe. Es ist sehr wahrscheinlich, dass Ihre Datei nicht existiert. Sie können eine nette benutzerfreundliche Fehlermeldung mit errno machen, stellen Sie sicher, dass errno.h. Alles in allem sollte Ihr Code funktionieren, aber Sie müssen die Rückgabewerte der Dinge überprüfen, weil returns NULL wenn es die Datei nicht finden kann.

FILE *fpointer = fopen("sudokuchar.txt", "r"); 

if(fpointer == NULL) { 
    fprintf(stderr, "Error: [Errno %d]: %s\n", 
      errno, strerror(errno)); 
    return 1; 
} 
+0

danke ich habe das hinzugefügt – katDouglas

0

Es ist ratsam zu überprüfen, welcher Dateizeiger zurückkehrt. Wenn der Dateizeiger 0 oder NULL zurückgibt, kann der Dateizeiger nicht auf den von Ihnen angegebenen Dateinamen zeigen. Auch können Sie diese verwenden

File *fp = fopen(file name with full path (i.e. /home/chex/read.txt),"r") 

prüfen man fopen FILE * fopen (const char * path, char * mode);

Verwandte Themen