簡體   English   中英

從二進制文件C ++讀取數組

[英]Reading arrays from binary file C++

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <fstream>

using namespace std;

int main()
{
    srand(time(0));
    const int array_size=10,n=10;
    int i,j,k;
    fstream io("io.dat", ios_base::binary);
    float a[array_size];
    for (i=0;i<n;i++) {
        cout<<"Inputting "<<i+1<<" array:\n";
        for (j=0;j<array_size;j++) {
            a[j]=(float)rand()/(RAND_MAX+1)*200-100;
            cout<<i+1<<"["<<j<<"]="<<a[j]<<endl;
        }
        io.write((char *)&a,sizeof(a));
    }
    io.close();
    io.open("io.dat", ios_base::binary);
    j=1;
    while (!io.eof()) {
        cout<<"Reading "<<j<<" array:"<<endl;
        io.read((char *)&a,sizeof(a));
        for (i=0,k=0;i<array_size;i++) {
            cout<<j<<"["<<i<<"]="<<a[i]<<endl;
            if (a[i]<0) k++;
        }
        cout<<"Number of negative elements in "<<j++<<" array="<<k<<endl;
    }
    return 0;
}

我被困在從二進制文件讀取數組。 問題在於中斷閱讀周期的條件甚至不起作用。 程序一次又一次地讀取相同的數組。

之所以出現這種問題,是因為您使用的是!in.eof() 解決此問題的最簡單方法之一是在while循環中讀取,如此代碼所示

io.open("io.dat", ios_base::binary);
j=1;
while ( io.read( (char *) &a, sizeof(a) ) )    //  changed the !in.eof
 {
    cout<<"Reading "<<j<<" array:"<<endl;  
    // Removed the read form here
    for (i=0,k=0;i<array_size;i++) 
     {
        cout<<j<<"["<<i<<"]="<<a[i]<<endl;
        if (a[i]<0) k++;
     }
    cout<<"Number of negative elements in "<<j++<<" array="<<k<<endl;
 }

好吧,那應該可以解決您的輸出問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM