2015-04-20 49 views
0

所以這裏使用時FSCANF程序崩潰的是我的代碼:FSEEK,並在同一時間

#include <stdio.h> 

typedef struct dat{ 
    int broj; 
    int sir; 
}sir; 

int main() { 
    sir sir; 
    FILE* fordat; 
    int i=0; 
    fordat = fopen("dattk.txt","w+"); 
    while(i<100) { 
     i++; 
     sir.broj = i; 
     sir.sir=-i; 
     fprintf(fordat,"%d %d", sir.broj, sir.sir); 
    } 

    // fseek(fordat,0,SEEK_SET); 
    //rewind(fordat);  
    // fscanf(fordat,"%d %d",sir.broj,sir.sir); 
    printf("%d% %d",sir.broj,c); 
    fclose(fordat); 

    return 0; 
} 

我用C研究並提出書面的這個簡單的例子程序,並從文件中讀取...

如果我刪除fseekrewindfscanf的評論,程序將運行。
但是,如果我刪除fseekfscanf的註釋,程序將編譯,但運行時會崩潰。
想不通爲什麼...

回答

3

fscanf呼叫被打破 - 變化:

fscanf(fordat,"%d %d",sir.broj,sir.sir); 

到:

fscanf(fordat,"%d %d",&sir.broj,&sir.sir); 

重要提示:如果您有打開了警告編譯(例如gcc -Wall ...),那麼編譯器會幫你指出這個錯誤,從而爲你節省時間和精力。始終啓用編譯器警告並注意它們。

還有一件事:在代碼中檢查絕對沒有錯誤 - 您應該檢查fopen以及可能失敗的所有其他調用之後的失敗。

+0

是的,我剛剛添加了一個關於錯誤檢查的句子。 –

+0

謝謝,這使它工作。 我知道這很簡單 –