【问题标题】:file handling: the code stops running文件处理:代码停止运行
【发布时间】:2017-08-30 15:32:44
【问题描述】:
#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 中可用的每个树种的名称(按百分比排序),然后是它所代表的种群百分比。

【问题讨论】:

  • 我很抱歉你的空格键。希望你能尽快得到一个新键盘,这样你就可以重新缩进你的代码了。
  • ^^^@AnttiHaapala 所说的。良好的格式和缩进不仅仅是让代码看起来漂亮的小事。缩进不佳会导致控制流和范围界定错误,如果您将代码发布到问答网站寻求帮助,往往会导致投票失败并以“不清楚”的形式关闭:(

标签: c++ c file-handling


【解决方案1】:

问题是您的文件指针fp 指向while 循环之后的文件末尾(您写入文件的位置)。所以后续的读取操作(fscanf)会立即返回EOF

您可以在读取文件之前将文件指针重置到开头:

fseek(fp, 0L, SEEK_SET);

如果错误检查您的库调用(fopenscanffscanf 等),您会注意到这一点。

【讨论】:

    【解决方案2】:

    %s 说明符解释了char*,但您传递的是char (*)[30]。即使它们指向相同的内存,它们也是不同的类型。

    删除引用运算符

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

    您还应该回退/重置fp 文件描述符的文件指针,在循环之后,指向文件末尾是什么导致fscanf 返回EOF。

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

    【讨论】:

      猜你喜欢
      • 2023-04-06
      • 1970-01-01
      • 2021-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-12
      • 1970-01-01
      • 2019-12-20
      相关资源
      最近更新 更多