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 是行缓冲的,因此人们键入答案然后返回。因此,您应该在代码中调整相同的行为。

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 回答