2017-08-30 3 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ファイル内に1行に1つのツリー。種名は30文字を超えません。

出力

は、それが表す人口の割合(%)に続いて、(その割合の順にソート)TUで使用可能な各樹種の名前を印刷します。

+4

スペースバーをおかけして申し訳ありません。あなたがすぐに新しいキーボードを手に入れて、あなたのコードを元に戻すことができたらと思います。 –

+2

^^^ @AnttiHaapalaとは何ですか?良い書式設定と字下げは、コードをきれいに見せかける簡単な問題ではありません。インデントが不十分な場合、制御フローとスコープのバグが発生します。コードをQ&Aサイトに投稿してヘルプを表示すると、ダウンボートとクロージングが「不明瞭」になる傾向があります。 –

答えて

0

%s指定子はchar* expextsが、何を渡していること​​です。たとえ彼らが同じメモリを指していても、それらは異なるタイプです。

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

削除参照演算子はまた、あなたは/巻き戻しfpファイルディスクリプタのファイルポインタをリセットする必要のある、ループの後、EOFそのfscanf戻りの原因をファイルの末尾にポイント。

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

問題は、(あなたがファイルに書き込む)whileループ後のファイルの末尾を指しているあなたのファイルポインタfpです。したがって、その後の読み取り操作(fscanf)はすぐにEOFを返します。

あなたは、ファイルを読み込む前に、最初にファイルポインタをリセットすることができます。

fseek(fp, 0L, SEEK_SET); 

エラーがあなたのライブラリ・コール(fopenscanffscanfなど)をチェックしている場合は、このことに気づいているだろう。

関連する問題