[英]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);
如果對您的庫調用( fopen
, scanf
, fscanf
等)進行錯誤檢查,您會注意到這一點。
%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.