2017-03-02 13 views
0
#include <time.h> 
#include <stdlib.h> 
#include <stdio.h> 
#include <conio.h> 

int main() 
{ 
    FILE *fp; 
    int r, i; 

    char fp_string [600] = "num1000.bin"; 

    fp = fopen(fp_string, "rb"); 

    for (i=0;i<1000;i++) 
    { 
     fread(&r, sizeof(int), 1, fp); 
     printf("%d, ", r); 
    } 

    fclose(fp); 
    getch(); 
    return 0; 
} 

このコードは現在、1000個の乱数を含むnum1000.binというバイナリファイルを読み取り、表示します。このコードでは、ループがforです。まったく同じタスクを実行するにはどうすればよいですか?配列を使用してバイナリファイルを読み取って表示する

+1

配列を使用しています。 fp_stringは配列です。 – VHS

+0

あなたは何をしたいですか?あなたが何を求めているのかは不明です。ファイルの代わりに配列を使用しますか?もしそうなら、binファイルを含める必要があります。もっと正確に... – xMRi

答えて

1

配列定義するには:freadを使用し、あなたのファイルから1000個のファイルを読むには

int r[1000]; 

を:

fread(r, sizeof(int), 1000, fp); 

あなたは、fread機能の説明にパラメータの1つを見ることができるように読み込む要素の数を指定します。 1から1000に変更してください。


数字を表示するには、まだループが必要です。 r 1つだけになりました1000個の数字を含む配列ではなく、ために - それは今r[i]ですか

for (i=0;i<1000;i++) 
{ 
    printf("%d, ", r[i]); 
} 

注意してください。

1

あなたは乱数の形式を知る必要があります。おそらく彼らはネイティブのint形式ですが、特に彼らが本当にあり、常識的なテストは不可能なので、チェックする必要があります。

あなたは数が正確に1000年であることを知っている場合は、関数fread

int r[1000]; 
fread(r, sizeof(int), 1000, fp); 

を使用して読むことができます。しかし、これは悪い癖です。データは早期に終了する可能性があります。フォーマットは、ネイティブからエンディアンを逆にするか、32ではなく16または64ビットにすることができます。バイナリ・データを移植可能にする習慣に入る必要があります。

関連する問題