文件处理:代码停止运行

file handling: the code stops running

本文关键字:运行 代码 处理 文件      更新时间:2023-10-16
#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 treen");
        scanf("%s", tree);
        fprintf(fp, "%sn", tree);
        printf("do you want to enter more  trees?enter 0 if no and 1 if yesn");
        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);