1

テキスト ファイルから最初の 121 バイトを構造体に読み込もうとしています。

これが私のコードです。

#include <fstream.h>
#include <iostream.h>
#include <conio.h>
#include <sys/stat.h>

int main()
{
    struct 
    {
        char map[121];
    } map_data;

    struct stat results;

    fstream myfile("input.txt", ios::in);

    myfile.read((char *)&map_data,121);

    if(!myfile)
    {
           cout<<"Unable to open the file";
    }
    if(!myfile.read((char *)&map_data,121))
    {
       cout<<"Second error occurred";
    }

    myfile.close();
    cout<<"\n Here are the read contents of size "<<sizeof(map_data)<<"\n";



    fstream outfile("output.txt", ios::out);
    for(int i=0;i<121;i++)
    {
        cout<<map_data.map[i]<<" ";
    }
    outfile.write((char *)&map_data,121);


    outfile.close();
    stat("input.txt",&results);
    cout<<"\n Size of input.txt "<<results.st_size;

    stat("output.txt",&results);
    cout<<"\n Size of output.txt "<<results.st_size;

    getch();

}

問題は、上記のコードがファイルの最初の文字、つまり hello の h をスキップすることです。その cout と output.txt ファイルの両方がこのことを示しています。

誰かがこれを解決する方法を教えてもらえますか?

4

2 に答える 2

1

私はガイドcourse.cs.vt.edu/cs2604/fall02/binio.htmlに従いました

この例は、ファイルを読み取る 2 つの異なる方法を示しており、例の間に...があります 。

それはまた言います// Same effect as above

したがって、2 つの読み取り呼び出しのいずれかをコメントアウトするだけです。

    fstream myfile("input.txt", ios::in);

    //myfile.read((char *)&map_data,121);

    if(!myfile.read((char *)&map_data,121))
    {
       cout<<"Second error occurred";
    }
于 2013-08-24T11:38:21.470 に答える
0

最初の文字だけが欠けていることに少し驚いています。121 文字が不足しているはずです。

fstream myfile("input.txt", ios::in);

// you read 121 bytes here...
myfile.read((char *)&map_data,121);

if (!myfile) {
    cout<<"Unable to open the file";
}

// and then do it again here, before you ever look at `map_data`.
if (!myfile.read((char *)&map_data,121)) {
    cout<<"Second error occurred";
}
于 2013-08-24T11:25:44.340 に答える