0

私がする必要があるのは、テキスト ファイルを配列に読み込むことです。各行には 4 つの部分があります。名前、ID、身長、体重。テキスト ファイルには 13 行あるので、13 回実行する必要があります。私はそれを機能させるためにループを書くつもりです (そして、配列を解析する関数になります)。基本的な配列でそれを行う方法は知っていますが、これには構造体を使用することになっています。これを行う方法を見つけようと周りを見回しましたが、実際には何もうまくいきません。ここに私がこれまで持っているコードがあります。

#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
using namespace std;
struct person
{
string firstname;
int id;
double height;
double weight;
};
int main()
{
person array[13];
person *ptr;
ptr = &array[0];
ifstream inData;
inData.open("peeps.txt");
while(!inData.eof())
{
    for(ptr = &array[0]; ptr < &array[13];ptr++)
    {
        inData >> person[ptr].firstname >> person[ptr].id
        >> person[ptr].height >> person[ptr].weight;


    }
}
}
4

1 に答える 1

1

あなたのやり方はかなり面倒ですが、ほぼ正しいです。ループ内で、クラスであるforindex を試みています。personそれはあまり意味がありません。代わりに、各反復で配列内のptr各オブジェクトを指している which があるpersonため、それを逆参照してそのメンバーに割り当てることができます。

inData >> ptr->firstname >> ptr->id
>> ptr->height >> ptr->weight;

ただし、さらに悪いことに、実行するとforループ内で未定義の動作が発生しますarray[13]。インデックス 13 には要素がないため、このようにアクセスすることはできません。条件を に変更することもできますがptr <= &array[12]、それでも非常に面倒です。

ただし、明確にするために、あなたが言ったように、ポインターの配列は絶対にありません。代わりに、s の配列がありますperson

ptr = &array[0];

これは、配列の最初のアドレスをperson取得し、それをポインターに割り当てます。配列からポインターへの変換を利用することで、これをはるかに簡単に行うことができます。

ptr = array;

また、eof()あなたのwhile基準はしばしばあまり良い考えではありません. 次の一連の読み取りが成功するかどうかを示す良い指標にはなりません。

于 2013-04-19T00:24:51.553 に答える