1

私は現在、カフェテリアをシミュレートするためにいくつかのクラスを実装する必要があるプロジェクトに取り組んでいます。食べ物を手に入れるために列に並んで待っている各「学生」には、名前、グループ、プリモピアットの種類、スナック/デザートの種類、およびオンスで購入する予定のサラダの量を表す数字の5つの変数があります。このすべての情報は、テキストファイルからfstreamを使用して読み込まれるという考え方です(アウトラインは特定の順序に従い、生徒ごとに繰り返されます)。各生徒が読み込まれると、私は生徒をキューに入れて、順番を待っている生徒をシミュレートします。

私の問題は2つあります。まず、 getline()関数を使用して各行を読み取るときに、この行を学生クラスのコンストラクターにプラグインし、そのコピーを列。情報を保存しようとすると、「これらのオペランドに一致する演算子'='はありません」と表示されるため、これは許可されていないようです。

私が抱えているもう1つの問題は、オンスのサラダ値を読み取ることです。これは整数値です。検索しましたが、数値を直接読み取って整数変数に渡す方法が見つかりませんでした。長い説明で申し訳ありませんが、私は明確にしたかったので、助けていただければ幸いです。

これが私がこれを行おうとするコードの一部です:

string temp_name;
string temp_group;
string temp_entree;
string temp_snack;
int temp_salad;


string line2;
queue<student> line;
ifstream myfile ("students.txt");
if(myfile.is_open())
    while(myfile.good())
    {
        temp_name= getline(myfile, line2);
        temp_group= getline(myfile, line2);
        temp_salad= getline(myfile, line2);
        temp_entree= getline(myfile, line2);
        temp_snack= getline(myfile, line2);

student s(temp_name, temp_group, temp_entree, temp_snack, temp_salad);
    //..... 
    }
4

3 に答える 3

0

getlineは文字列を返さないため、戻り値を文字列に割り当てようとしないでください。

行う:

getline(myfile, temp_name);

それ以外の

temp_name = getline(myfile, line2);

ファイル内の次の整数を読み取るには、ストリーム入力演算子を使用します。

int temp_salad;
myfile >> temp_salad;
if (myfile.fail())
    std::cerr << "we failed to read temp_salad ounces\n";
于 2012-05-09T04:34:24.110 に答える
0

getline()を返しますistream&。これは、行を抽出した後の最初の引数です。その行を2番目の引数(line2あなたの例では)に読み込みます。したがって、次のようになります。

getline(myfile, name);
getline(myfile, group);
// ...

また、getline文字列を読み取るため、に格納する前にその文字列を整数に変換する必要がありますtemp_salad。これを行うにはいくつかの方法がありますが、最も簡単な方法は次のとおりです。

getline(myfile, temp);
salad = atoi(temp.c_str());

#include <cstdlib>そのファイルに必ず入れてください。

于 2012-05-09T04:39:32.183 に答える
0

operator>>次のように、入力から整数を読み取り、それを変数に入れるために使用できますmyfile >> my_int;

あなたは明らかにクラスとして定義しているので、そのクラスが学生のすべてのデータを読み込むためにstudentオーバーロードします。operator>>

std::istream &operator>>(std::istream &is, student &s) { 
    std::getline(is, s.name);
    std::getline(is, s.group);
    std::getline(is, s.entree);
    std::getline(is, s.snack);
    std::string temp;
    std::getline(is, temp);
    s.salad = lexical_cast<int>(temp);    
    return is;
}

次に、その演算子を使用してオブジェクトを読み込むことができます。上記のようにループ内で直接、またはその型を介してインスタンス化された次studentのように間接的に読み込むことができます。istream_iterator

std::deque<student> line((std::istream_iterator<student>(infile)),
                          std::istream_iterator<student>());

この場合、実際のキューの代わりにdequeを使用していることに注意してください。C++では、キューはイテレーターアダプターとして定義されており、一般的には二流市民のようなものです。多くの場合(この場合を含めて) 、その定義std::dequeの一部が必要ない場合でも、より単純です。double-ended

于 2012-05-09T04:43:39.847 に答える