2016-07-12 1 views
0

私は関数を持ち、その関数の外で初期化された配列を持っています。この関数の中では、私の配列のすべての値をゼロに設定しています。そのため、ゴミが返されません。私はファイルをスキャンしようとしており、ファイル内でスキャンしている番号(たとえば7)を使用して、配列のインデックスを1つ追加して更新します(インデックス7の値は1になります)。 whileループは最初にプログラムをクラッシュさせ、forループを使用するとプログラムは実行されますが、値は更新されません。私のループは、未知の時間の間走らせる必要がありますが、それは別の時間の問題だと思います。ファイルを読み込んだ後に新しい値で更新する関数で配列を取得できません

void createVArray (FILE*votes, int ray[], int len){ 

    votes=fopen("votes.txt","r"); 

    int i,k,num; 

    for(i=1;i<len;i++){ 
     ray[i]=0; 
    } 

    while(num!=30){ 
    fscanf(votes,"%d",&num); 
     ray[num]++; 
    } 

} 

問題は何ですか?

+0

なぜ 'votes'を引数に渡しますか? – juanchopanza

+0

パラメータには?プログラムの指示によると、これは3つのパラメータ、すなわちFILE *と整数 の配列と配列の長さを示す整数をとるvoid関数です。それがあなたが何を指しているのではない場合、あなたは何を意味するのか説明できますか?私は数週間だけコーディングしてきました。 @juanchopanza – ctelchi

+0

@ctelchi彼は確かにそれを参照しています。関数本体の中にファイルポインタを宣言するだけで済みます。 – ameyCU

答えて

1
while(num!=30){ 
    fscanf(votes,"%d",&num); 
     ray[num]++; 
    } 

ここにはいくつかの問題があります。最初にnumを初期化しないので、初めてnum30と比較すると、未定義の動作が発生します。マジックナンバー30はどこから来たのですか?

第2に、numを読み取った後に、ray[num]を増やす前に、それが(len-1)より大きくないようにする必要があります。

おそらく、このようなものは動作します:

while(fscanf(votes,"%d",&num) == 1) { 
     if ((num >= 0) && (num < len)) { 
     ray[num]++; 
     } 
    } 
+0

30は、読み込み中のファイルから来ています。これは、プログラムが読み込みを停止する場所です。 intはintで初期化されていませんか? – ctelchi

+0

'int num;'はnumをintとして宣言しますが、何にも初期化しません。 – FredK

-1

よし男を。問題が解決しました。私はちょうど馬鹿です - 私は "投票"の代わりに "votes.txt"というファイルを付けましたので、ファイルを読むことさえできませんでした。ロックオン。助けを借りてくれてありがとう。スーパーは助けに感謝します。

+0

_ **あなたの問題を解決する答えが得られたら、代わりに別の回答を投稿しないでください。乾杯:) – ameyCU

+0

@ameyCUああありがとう。完了!初めてstackoverflowを使用して、それは表示されますか? – ctelchi

関連する問題