2017-01-14 30 views
2

我目前正在從C中USACO的舊編碼問題。這裏是我的代碼的第一對夫婦的行,我嘗試使用fscanf()函數來獲取第一值,int,從blocks.in文件:C fscanf分段錯誤錯誤「沒有源可用於」flockfile()在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); 

運行GDB(如Eclipse的C/C++ IDE的一部分),我始終得到關於分段錯誤行:

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

錯誤始終寫着:適用於 「flockfile()在0x7fff855e6d39」

我一直沒能源問題

沒有源。過去我沒有遇到任何問題。你是否看到了錯誤,或者有更好的解決方案/功能來提取數據?

+5

也許'fin = fopen(「blocks.in」,「r」)'失敗。在'fscanf(fin,「%d」,&linecount)之前測試'if(fin)';' – chux

+1

歡迎使用Stack Overflow。 請注意,在這裏說'謝謝'的首選方式是通過 提高投票的好問題和有用的答案(一旦你有足夠的聲譽這樣做),並接受任何 問題最有用的答案,你問(這也給你一個小小的提升,以你的聲望 )。 請參閱[關於]頁面,以及[如何在此處提問 ?]和 [當有人回答我的 問題時,我該怎麼辦? ?](http://stackoverflow.com/help/someone-answers) –

回答

5

我懷疑運行程序的目錄中沒有blocks.in文件。即使該文件存在,它可能無法成功打開。一些簡單的錯誤檢查可以幫助你避免這裏的問題:

#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

謝謝你的回覆。我在程序的同一目錄下有一個blocks.in文件。一個相同的程序已經在我寫過的程序上工作過,所以我認爲這不太可能。 –

+0

@ JordanAndo--有趣。當我在我的系統上運行沒有'blocks.in'文件的代碼時,出現段錯誤。隨着文件目前,沒有問題。此外,即使沒有文件存在,通過錯誤檢查(您應該始終這樣做)沒有段錯誤,只是錯誤消息。即使該文件存在,它可能無法成功打開;我建議你在嘗試別的之前添加錯誤檢查。 –

+2

我添加了錯誤檢查,結果證明文件沒有正確打開。我redid的blocks.in文件,它似乎工作正常。感謝您的幫助! –