2011-06-07 93 views
0
struct recordNode { 
    char district[50]; 
    int employees; 
    int employers; 
    int students; 
    int retried; 
    int others; 
    struct recordNode* left; 
    struct recordNode* right; 
}; 

FILE *getFile (char filename[]) { 
    struct recordNode* node; 

    FILE* fpin; 
    FILE* fpout; 

    char line_buffer[lineSize]; /* BUFSIZ is defined if you include stdio.h */ 
    int counter = 0; 
    filename = "testData.txt"; 

    //file validation 
    fpin=fopen("testData.txt", "r"); 

    if (fpin == NULL) exit(0); 
     counter = 0; 
    while (fgets(line_buffer, sizeof(line_buffer), fpin)) { /* same as while (feof(in) != 0) */ 
       counter++; 
       if (counter != 0) { 
       //Central & Western - Chung Wan,7576,1042,2156,1875,3154 (sample data) 
       sscanf(line_buffer, "%s,%d,%d,%d,%d", node->district, node->employees, node->students, node->retried, node->others); 
       printf("%s", node->district); **//error** 
       } 


       getchar(); 



    } 
     getchar(); 

    return fpout; 
} 

我編譯時出錯,我的代碼出了什麼問題?有一個錯誤信息 項目Project1.exe引發的異常類EAccessViolation與消息....................(borland C++)從文件中拆分文本

+0

編譯時不會出現該錯誤,您在運行時會得到該錯誤。請學會準確。 – 2011-06-07 16:04:00

回答

3

您的問題(或至少其中)中的一個是在這裏:

sscanf(line_buffer, "%s,%d,%d,%d,%d", node->district, node->employees, 
         node->students, node->retried, node->others); 

所有除了第一個這些參數應該是指針:

sscanf(line_buffer, "%s,%d,%d,%d,%d", node->district, & node->employees, 
         & node->students, & node->retried, & node->others); 

而且,這樣的:

filename = "testData.txt"; 

應該不存在 - 要讀取的文件的名稱作爲參數傳遞給該函數。

最後,這樣的:

struct recordNode* node; 

應該是:

struct recordNode node; 

,你需要像node->district改變的事情node.district。這是令人厭煩的工作 - 也許你可以在發佈之前花更多的精力去追逐這些東西。你將學到更多的方式。

+0

根據你的意見改變,但是錯誤信息仍然是 Project1.exe引發異常類EAccessViolation with Message ....................(borland C++) – hkvega01 2011-06-07 15:59:17

+0

+ 1好抓。我誤解了「文件名」部分。它實際上是一個可以分配給它的指針。 – cnicutar 2011-06-07 15:59:21

+0

@ hkvega01這不是編譯器錯誤。 – cnicutar 2011-06-07 15:59:51