2013-01-07 40 views
-2

我編寫它寫在一個文件,並從中讀取寫入部件工作正常程序,但我不能看它的內容,它不顯示任何內容。 。 這裏是我的代碼:不起作用C編程

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

int main() 
{ 
    char mot[20]; 
    int i; 
    FILE *p; 

    p = fopen("/home/mehdi/Bureau/mot.txt", "w+"); 
    printf("Veuillez saisir vos 4 mots : \n"); 
    for(i=0; i<4; i++) 
    { 
     gets(mot); 
     fprintf(p, "%s | ", mot); 
    } 

    fclose(p); 
    p = fopen("/home/mehdi/Bureau/mot.txt", "r+"); 

    printf("\n Les mots de votre fichier : \n"); 
    while(!feof) 
    { 
     fscanf(p, "%s \n", mot); 
     puts(mot); 
    } 

    fclose(p); 

    return 0; 
} 

你對此有什麼想法?謝謝

+0

不要使用'FEOF()'。 –

+0

我應該使用什麼? – Copernic

+2

'而(!FEOF)...'讀作 「而'FEOF的地址()'函數是NULL」 – pmg

回答

3

必須fclose()文件並再次打開它進行閱讀,開始閱讀之前。或者,因爲你爲了讀你寫的只是使用讀/寫模式,fseek()回到開始。文件中只有一個「當前位置」,而不是單獨的讀寫文件。

另外,您的閱讀邏輯有缺陷,在嘗試進行閱讀之前無法撥打feof()。它僅在讀取失敗後纔有用,以確定它失敗的原因。

你應該依靠fscanf()(或更好,fgets())的返回值,並避免使用feof()乾脆。

+3

或者至少追溯到開始。 'w +'已經打開供閱讀。 –

+0

@CarlNorum True,已編輯。謝謝。 – unwind

+0

謝謝:) @CarlNorum我已經編輯我的代碼,但仍然沒有爲讀取部分工作.. – Copernic

2

第一件事:你應該改變while (!feof)while (!feof(p))

FEOF是一個函數,而不是一個變量。

ANYWAY,使用FEOF功能就是錯的。 檢查這個詳細的話題細節:「while(!feof(file))」 is always wrong

考慮使用與fgets代替:

while(fgets(mot, sizeof(mot), p)) 
    puts(mot); 

小心使用變得太。這是獲得緩衝區溢出的最佳方法。 像GCC說:警告:'得到功能是危險的,不應該被使用。

+1

-1:建議某人(錯誤地)使用'FEOF()'是不好的。 – pmg

+0

建議在哪裏?來吧...... –

+1

使用'FEOF()'來確定下一讀取失敗是錯誤的。使用'feof()'(在讀取失敗之後)來確定前一次讀取是否因文件結束而失敗。編輯您的帖子,我會撤銷-1。 – pmg