2017-08-30 250 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等)。