1

ファイルから整数を読み取るためのこのコードがあります。同じコードを使用して別のファイルからdoubleを読み取り、完全に機能しましたが、今回はループが無限になります。何ができるでしょうか?私が読んでいるファイルはプログラムによって書かれたものでしょうか?これが何を意味するのかわかりませんが、私のOSはファイルがバイナリであると言っています。さて、どんな助けもいただければ幸いです。ありがとう。

i=1;
cadeia = malloc ( i * sizeof(int) );
if (!cadeia){ //Avalia se a alocação de memória foi bem sucedida
  printf("Problema na alocação de memória para cadeia.");
  exit(0);
}
while ( !feof( arq_cadeia ) ){ /*Fazendo leitura e alocação de memória da matriz de transição*/
   fscanf ( arq_cadeia , "%d" , ( cadeia+i-1 ) );
   i++;
   cadeia = realloc ( cadeia , i * sizeof( int ) );
   if (!cadeia){ //Avalia se a alocação de memória foi bem sucedida
  printf("Problema na alocação de memória para cadeia.");
  exit(0);
   }
   printf("%d\n", *( cadeia+i-1 ));
}
4

2 に答える 2

2

scanfファイルがバイナリ形式で読み取れない場合、あなたの推測は正しいです。テキスト エディタ (メモ帳など) で数値が表示されない場合は、数値scanfも読み取れません。

ところで、あなたのプログラムには他にも問題があります: 数値を読み取るたびに配列全体を再割り当てするのは非常に非効率的です! 最も簡単な方法は、すべてを必要としないほど多くのスペースを割り当てることです (やり過ぎない限り、「無駄」について心配する必要はありません)。2番目に簡単なのは、ファイルのサイズを測定し(必要になるstatか、そのようなもの)、その中の整数の数を見積もることです。3番目に簡単なのは、10000個の整数に十分な量を割り当て、いつ不足するかを注意深く確認し、すでに持っている量の2倍を割り当てます。

于 2012-07-10T15:40:32.437 に答える
0

テキストモードで書かれていると仮定して整数を読んでいます。ご想像のとおり、ファイルがテキスト ファイルかバイナリ ファイルかを確認してください。テキストエディタで開いて中身が読めるならテキストファイルです。それ以外の場合は、バイナリ ファイルを読み取るためにプログラムを調整する必要があります。

于 2012-07-10T15:40:34.667 に答える