我正在尝试将用户输入的字符串存储到动态数组中。对于“普通”数组,你只需使用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);
答案 0 :(得分:3)
与人交往时,最好一次一行 std :: cin是行缓冲的,因此人们输入答案后返回。因此,您应该在代码中调整相同的行为。
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>>
在字符串上使用时只读取输入中的“空白”seporated字(它在输入流上留下'\ n')。因此,如果将operator>>
与其他读取操作结合起来,则需要记住考虑并补偿这一事实。
答案 1 :(得分:1)
这不是动态数组的问题。输入数组大小时,新行字符将存储到缓冲区中。当涉及到最后一行(cin.get)时,将采用新行字符并退出程序。 尝试
cin >> inputPtr;
而不是
cin.get(inputPtr, arraySize);