2017-08-30 132 views
0
#include <stdio.h> 
main() 
{ 
    FILE* fp; 

    fp = fopen("a.text", "w+"); 

    int yes = 1, count = 0; 

    char tree[30]; 

    while (yes) { 
     printf("enter the name of the tree\n"); 
     scanf("%s", tree); 
     fprintf(fp, "%s\n", tree); 
     printf("do you want to enter more trees?enter 0 if no and 1 if yes\n"); 
     scanf("%d", &yes); 
     count++; 
    } 

    char treeArr[count][30]; 
    int i = 0; 
    for (i = 0; i < count; i++) { 
     fscanf(fp, "%s", &treeArr[i]); 
     printf("%s", treeArr[i]); 
    } 

    fclose(fp); 
} 

這部分代碼無法正常工作。文件處理:代碼停止運行

char treeArr[count][30]; 
int i = 0; 
for (i = 0; i < count; i++) { 
    fscanf(fp, "%s", &treeArr[i]); 
    printf("%s", treeArr[i]); 
} 

我需要寫樹的名字在文件中,然後把它變成一個字符串數組,這樣我可以計算出每個樹的百分比。

這是問題。請提供合適的解決方案。

1.當你沿着TU校園漫步時,你會看到許多不同樹種的樹木。

園藝中心已經準備了從CSE部門到正門的每一棵樹的清單。

你必須報告每個樹種的百分比。

輸入

輸入到你的程序包括由園藝系觀察到的每一棵樹的物種的名單; .txt文件中的每行一棵樹。沒有物種名稱超過30個字符。

輸出

打印在TU每個可用的樹種(在他們的百分比排序),其次是它代表的人口比例的名稱。

+4

對不起您的空格鍵。希望你很快得到一個新的鍵盤,這樣你就可以重新獲得你的代碼。 –

+2

^^^ @AnttiHaapala說什麼。良好的格式和縮進不僅僅是讓代碼看起來很漂亮的一件小事。可憐的縮進會導致流程控制和範圍問題,如果您將代碼發佈到Q&A網站以獲取幫助,往往會導致downvotes並關閉爲'不清楚':( –

回答

0

%s符expexts的char*但你逝去的是​​。即使他們指向相同的內存,它們也是不同的類型。

刪除參考操作

fscanf(fp,"%s",treeArr[i]); 
       ^^^^^^^^^^ 

你也應該快退/復位fp文件描述符的文件指針其中,循環後,指向文件的結尾是什麼原因導致fscanf返回EOF。

fseek(fp, 0L, SEEK_SET); 
// Or 
rewind(fp); 
3

問題是你的文件指針fp指向文件的while循環後結束(你寫入到文件)。所以後續的讀取操作(fscanf)立即返回EOF

可以讀取文件之前,文件指針開始復位:

fseek(fp, 0L, SEEK_SET); 

你會注意到這一點,如果錯誤檢查庫調用(fopenscanffscanf等)。