0
こんにちは私はファイルから整数の配列を読み書きしようとしていますが、それらを読み込むために使用しているループは無限ループです。どのようにしてこの無限ループを修正して、ファイルの終わりに達したときにループを終了するようにします。また、フリーダが私が期待していることをしているかどうかは完全にはわかりません。バイナリファイルから整数の配列を読み書きする
FILE *fptr = fopen("number.db", "wb");
int nums[100] = {1,2,3,4,5,6,7,8,9,100,101,102,103,104,105};
int nums2[100];
fwrite(nums,sizeof(int),15,fptr);
fclose(fptr);
fptr = fopen("number.db", "rb");
fseek(fptr,0,SEEK_END);
long end = ftell(fptr); //finds length of the file
fseek(fptr,0,SEEK_SET);
while(!feof(fptr)){
int counter = 0;
fread(nums2,sizeof(int),1,fptr);
fseek(fptr,counter,SEEK_SET);
counter++;
if(counter>=end){ //Breaks when it seeks to the end
break;
}
fclose(fptr);
私はフリーダの論理に何かがあるように感じますが、私はあまりよく分かりません。 "nums2"に保存されている番号を印刷すると、最後に読み取られた番号だけがnums2のすべての要素に対して105となります。
これは、ループ内で毎回 'counter'を0に初期化し、ポインタをファイルの先頭に移動する' fseek'のため、無限ループです。 – kuro
と 'fread(nums2、sizeof(int)、1、fptr);' - > 'fread(nums2 + counter、sizeof(int)、1、fptr)のループの外側で' int counter = 0; 'を取り出してください。 '、' end/= sizeof(int);が必要です。 – BLUEPIXY