私は入力として名前をとり、最終的にバイナリ検索&を並べ替えるプログラムに取り組んできました。しかし、配列を動的なサイズにしようとすると(ループの繰り返しごとに1つずつ増加する)、さまざまな問題が発生しました。動的配列のサイズとgetline()でのクラッシュ。
私は文字列配列を20個の要素で構成することができますし、プログラムは動作しますが、私の割り当てに余分なクレジットはそれを動的なサイズにすることです。現在、プログラムは "getline(cin、Names [x]);"に達するとエラーコードなしでクラッシュします。 私は周りを探索してきましたが、この場合は配列の代わりにベクトルを行うほうが簡単かもしれないことは分かっていますが、この割り当てでベクターを使用することは許されていません。それが作成された後
おかげ
オリジナルコードは
using namespace std;
#include <iostream>
#include <string>
void main()
{
int x = 0;
string * Names = new string[x];
bool NameInputEnd(0);
cout << " Enter your names to be sorted\n";
cout << "To exit just press [Enter] at any time\n";
do
{
cout << x << endl;
cout << "\n< Name " << (x + 1) << " > = ";
!!**CRASHES HERE**!!
getline(cin, Names[x]);
if (Names[x].empty() || x == 19)
{
cout << "\nFinal Name Amount = " << (x + 1) << endl << endl;
NameInputEnd = 1;
continue;
}
x++;
} while (NameInputEnd == 0);
delete [] Names;
}
変更
int tempsize(1), x(0);
string * Names = new string[tempsize];
...
do
{
...
x++;
tempsize++;
}while (NameInputEnd == 0);
を使用するとき、X ' 'の値が何であるかを考えてみて'文字列*名=新しい文字列[X]; ' 。何個の要素を作りましたか( 'x'の価値)?また、 'std :: vector'を使うことに変えてください。 – NathanOliver
ああ、私は0の要素のサイズを持つように配列を設定していたことを理解しています。これは検索したものからは無効です。私は今、代入する一時変数を作成しました。最初は1に設定され、各ループ反復でxと同時に1ずつ増加します。 –
アレイは作成後は拡張できません。 'x'をインクリメントすると、配列のサイズが魔法的に増加することはありません。最初に十分なスペース( 'string * Names = new string [20];')を割り当てるか、サイズが大きくなる 'std :: vector'を使います。 –