2017-01-14 2 views
2

Ich arbeite derzeit an einem alten Codierungsproblem von USACO in C. Hier sind die ersten paar Zeilen meines Codes, in denen ich versuche die fscanf() Funktion zu verwenden, um den ersten Wert, ein int, von der blocks.in Datei zu packen:C fscanf Segmentierung Fehler Fehler "Keine Quelle für" Flockfile() um 0x7fff855e6d39 "

#include <stdio.h> 
#include <stdlib.h> 
int main() { 
    FILE *fin = fopen ("blocks.in", "r"); 
    FILE *fout = fopen ("blocks.out", "w"); 
    int i,j; 
    int linecount = 0; 
    int alphabetCount[26]; 
    fscanf(fin," %d",&linecount); 

Lauf gDB (als Teil des Eclipse C/C++ IDE), habe ich einen Segmentation Fault Fehler konsequent auf das bekommen Linie:

fscanf(fin," %d",&linecount); 

Der Fehler konsequent lautet:

Keine Quelle für "flockfile() bei 0x7fff855e6d39" verfügbar

Ich habe nicht in der Lage, das Problem zu beziehen. Ich hatte in der Vergangenheit keine Probleme damit. Sehen Sie, was falsch ist, oder haben Sie eine bessere Lösung/Funktion, mit der Sie die Daten extrahieren können?

+5

Vielleicht 'fin = fopen (" blocks.in "," r ")' fehlgeschlagen. Testen Sie 'if (fin)' vor 'fscanf (fin,"% d ", & linecount);' – chux

+1

Willkommen bei Stack Overflow. Bitte beachten Sie, dass die bevorzugte Art zu sagen "Danke" hier ist durch Up-Voting gute Fragen und hilfreiche Antworten (sobald Sie genug Ruf zu tun haben), und durch die Annahme der hilfreichsten Antwort auf alle Fragen Sie fragen (Das gibt Ihnen auch einen kleinen Schub für Ihre Ruf). Bitte lesen Sie die [Über] Seite und auch [Wie stelle ich Fragen? hier?] (Http://stackoverflow.com/help/how-to-ask) und [Was mache ich, wenn jemand meine Frage beantwortet ?] (http://stackoverflow.com/help/someone-answers) –

Antwort

5

Ich vermute, dass es keine blocks.in Datei in dem Verzeichnis gibt, aus dem Sie das Programm ausführen. Selbst wenn die Datei vorhanden ist, wird sie möglicherweise nicht erfolgreich geöffnet. Einige einfache Fehlerüberprüfungen können Ihnen dabei helfen, Probleme zu vermeiden:

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

int main(void) { 
    FILE *fin; 
    FILE *fout; 
    int i,j; 
    int linecount = 0; 
    int alphabetCount[26]; 

    if ((fin = fopen("blocks.in", "r")) == NULL) { 
     fprintf(stderr, "Unable to open input file\n"); 
     exit(EXIT_FAILURE); 
    } 
    if ((fout = fopen("blocks.out", "w")) == NULL) { 
     fprintf(stderr, "Unable to open output file\n"); 
     exit(EXIT_FAILURE); 
    }  

    fscanf(fin," %d",&linecount); 

    return 0; 
} 
+0

Vielen Dank für Ihre Antwort. Ich habe eine blocks.in Datei im selben Verzeichnis wie das Programm. Ein identisches Verfahren hat an vergangenen Programmen gearbeitet, die ich geschrieben habe, daher halte ich das für unwahrscheinlich. –

+0

@ JordanAndo-- Interessant. Wenn ich deinen Code ohne eine blocks.in Datei auf meinem System starte, bekomme ich einen segfault. Mit der vorhandenen Datei keine Probleme. Auch bei der Fehlerprüfung (was man immer tun sollte) gibt es auch ohne die vorhandene Datei keinen segfault, nur die Fehlermeldung. Selbst wenn die Datei vorhanden ist, wird sie möglicherweise nicht erfolgreich geöffnet. Ich schlage vor, dass Sie die Fehlerprüfung hinzufügen, bevor Sie etwas anderes versuchen. –

+2

Ich habe die Fehlerprüfung hinzugefügt und es stellt sich heraus, dass die Datei nicht ordnungsgemäß geöffnet wurde. Ich habe die Blocks.in-Datei neu erstellt und es scheint, dass sie gut funktioniert. Danke für Ihre Hilfe! –