#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中可用的每种树种的名称(按百分比排序),然后是它所代表的人口百分比。
答案 0 :(得分:3)
问题是你的文件指针fp
指向while
循环(你写入文件的地方)之后的文件末尾。因此,后续的读取操作(fscanf
)将立即返回EOF
。
您可以在读取文件之前将文件指针重置为开头:
fseek(fp, 0L, SEEK_SET);
如果错误检查您的图书馆电话(fopen
,scanf
,fscanf
等),您会注意到这一点。
答案 1 :(得分:0)
%s
说明符取代char*
,但您传递的是char (*)[30]
。即使他们指向相同的记忆,他们也是不同的类型。
删除引用运算符
fscanf(fp,"%s",treeArr[i]);
^^^^^^^^^^
此外,您应该回滚/重置fp
文件描述符的文件指针,在循环之后,指向文件末尾导致fscanf
返回EOF的原因。
fseek(fp, 0L, SEEK_SET);
// Or
rewind(fp);