2016-08-01 98 views
0

我是C新手,我只是想讀取我在C中創建的簡單文本文件。我通過單擊新建 - >空文件 - >保存它到我想要的位置,然後添加文件擴展名(.txt),文本文件包含樣本數獨板,完整文件名爲sudokuchar.txt。如何從文本文件中讀取我在C中創建

我從文件中讀取和打印的代碼是:

#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); 
} 

所以當我編譯程序不顯示任何信息,並返回-1。我假設我想從中讀取的文件有問題?如果有人能幫助它將不勝感激。

+1

「我想要的位置」 - 除非那個期望的位置也是您的進程在運行時的活動工作目錄,否則發佈的代碼將無法找到該文件,而'fopen'將返回NULL。沒有檢查,而是錯誤地認爲它剛剛工作,傳遞NULL作爲文件指針到'fgets',然後調用* undefined behavior *。它似乎有一些錯誤檢查和運行時啓動配置更改是按順序。 – WhozCraig

+0

那麼我如何將文件保存到活動的工作目錄? – katDouglas

+0

另請注意,'main()'是類型爲'int'的函數,並且應該在退出時返回0或正8位*值(例如'return 0;'如果沒有錯誤, 255'錯誤)。還要注意,'main'的正確聲明是'int main(void){...'或'int main(int argc,char * argv []){...'(您會看到相同的'char ** argv'而不是'* argv []',並且還有一些編譯器接受的其他非可移植參數)。這不會導致讀取失敗(最可能出現'fopen'失敗),但獲得正確的基礎幫助。 –

回答

1

總是檢查返回值fopen和其他標準庫調用。這很可能是您的文件不存在。你可以使用errno製作一個友好的用戶友好的錯誤信息,只要確保包含errno.h。總的來說,你的代碼應該可以工作,但是你需要檢查事物的返回值,因爲如果它找不到文件fopenreturns NULL

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

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

謝謝你,我加了這個 – katDouglas

0

建議檢查文件指針返回的內容。如果文件指針返回0或NULL,則文件指針無法指向您提供的文件名。你也可以使用這個

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

檢查man fopen FILE *的fopen(爲const char *路徑,爲const char *模式);