2016-05-10 4 views
-2

内の以前に定義されたデータ型を再利用:は、私は次のことをやろうとしているループ

そして、その後、(ベクトルの集合を構築するために使用される)の値をユーザーに尋ね、名前をユーザーに尋ねます値のいろいろな組み合わせを印刷してから、もう一度やり直してください。

私の問題は、最初のループの後、再び名前を尋ねた後に、「セグメンテーションフォルト(コアダンプ)」というエラーメッセージが表示されることです。私はこれが最初のループで構築/定義されたベクトルと関係していると仮定しています。だから、私はループの後にこれらのオブジェクトをクリアする方法があるのだろうかと思います。つまり、私が好きなのは:

Do { 
    ask user for name 
    ask user for values 
    create vectors from these values 
    print off certain elements of the vectors 
    reset/delete name, values, vectors so that I can run the loop again as if it's the first time 
} while(condition); 

あなたが役に立つと思われる参考になると思います。前もって感謝します。

+0

'vecclear();で' std :: vector'インスタンス 'vec'をクリアします – ArchbishopOfBanterbury

+0

@jonesy、なぜリセット/クリアする必要がありますか?私はベクトルが正しいクラスだとは思わない。 – Igor

+0

セグメンテーションフォルトはどのようなコードですか?それを投稿するか、質問が理解されない – Exceptyon

答えて

0

ループ外のベクターを作成し、ループ内からベクターをクリアすることができます。これは、次のようになります:

vector<string> info; 
do { 
    // get input and do whatever 
    info.clear(); 
} while (condition); 

一部のマニュアルhttp://www.cplusplus.com/reference/vector/vector/clear/

更新:

私のオリジナルの答えは、具体的ベクトルをクリアする方法を通知しましたが、可能性があるようにそれはそうとあなたのためのよりよい解決策です。あなたの説明を考えれば、宣言をループ外に移動し、最後にベクターをクリアする必要はないようです。追加のコードがなければ、segフォルトの原因を知る方法がなく、この問題を適切に処理する方法がありません。

+0

ありがとうございます。私はここから始めます。 – jonesy

+3

しかし、なぜですか?内部に 'info'を宣言するだけで、それは体にスコープされます。 _それと戦う代わりに、言語_を使用してください。 –

+0

@LightnessRacesinOrbitええ質問の説明に従えばこのようにする必要はありませんが、これはベクトルをクリアする方法の問題に答えます。この場合、ループの外にベクターを宣言し、最後にそれをクリアする理由はないようです。 – twynn

関連する問題