如何将cin读入动态数组?

时间:2013-08-05 03:43:31

标签: c++

我正在尝试将用户输入的字符串存储到动态数组中。对于“普通”数组,你只需使用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);

2 个答案:

答案 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);