簡體   English   中英

文件處理:代碼停止運行

[英]file handling: the code stops running

#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中可用的每種樹種的名稱(按百分比順序排序),然后是其代表的種群百分比。

問題是您的文件指針fp指向while循環(您在其中寫入文件)之后的文件末尾。 因此,后續的讀取操作( fscanf )將立即返回EOF

您可以在讀取文件之前將文件指針重置為開頭:

fseek(fp, 0L, SEEK_SET);

如果對您的庫調用( fopenscanffscanf等)進行錯誤檢查,您會注意到這一點。

%s說明符擴展了char*但您傳遞的是char (*)[30] 即使它們指向相同的內存,它們也是不同的類型。

刪除參考運算符

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

同樣,您應該倒帶/重置fp文件描述符的文件指針,該文件指針在循環之后指向文件末尾,這導致fscanf返回EOF。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM