2

ユーザーが入力した文字列を動的配列に格納しようとしています。「通常の」配列の場合は、ここで使用したように get 関数を使用するだけで、すべて正常に機能します。ただし、これは動的配列では機能しないようです。コンパイルすると、プログラムは基本的に入力セグメント全体をスキップして、その後に続くものに移動します。何かを入力できるようにするために一時停止することさえありません。では、cin 入力を動的配列に格納するにはどうすればよいでしょうか。注: これは特定の割り当てのためのものなので、文字列や非動的配列を使用するように言わないでください。私はできません。

int arraySize;
cout << "Enter a maximum length for the string: ";
cin >> arraySize;
arraySize += 1;

char *inputPtr;
inputPtr = new char[arraySize];

cout << "Enter a string to be converted: ";
cin.get(inputPtr, arraySize);
4

2 に答える 2

3

人間とやり取りするときは、一度に一行ずつ行うのが最善です。
std::cin は行バッファリングされているため、回答を入力してから return を入力します。したがって、コードで同じ動作を適応させる必要があります。

std::string   arraySizeString;
std::getline(std::cin, arraySizeString);  // Get user input.

// Convert input to type we want.
int           arraySize;
std::stringstream arraySizeStream(arraySizeString)
if (! (arraySizeStream >> arraySize))
{
    // Error user did not enter a number.
    // You may want to check if the user entered more than just a number
    throw 1;
}

// Now read the lines into a dynamically size array (or vector).
std::vector<std::string>  data(arraySize);
for(int loop = 0; loop < arraySize; ++loop)
{
    std::getline(std::cin, data[loop]);
}        

あなたが抱えている問題はoperator>>、文字列で使用すると、入力から「空白」で区切られた単語のみを読み取ることです(入力ストリームに「\ n」が残ります)。したがって、他の読み取り操作と組み合わせる場合は、operator>>この事実を考慮して補正することを忘れないでください。

于 2013-08-05T04:06:53.173 に答える
1

これは動的配列の問題ではありません。配列のサイズを入力すると、改行文字がバッファーに格納されます。最後の行 (cin.get) になると、その改行文字が取得され、プログラムが終了します。試す

cin >> inputPtr;

それ以外の

cin.get(inputPtr, arraySize);
于 2013-08-05T03:52:53.203 に答える