我正在尝试创建一个允许用户输入多个整数的函数,因此如果用户希望拥有3个不同整数的存储,输入将如下所示:
5
97 12 31 2 1 //let's say this is held in variable "a"
1 3 284 3 8 // "b"
2 3 482 3 4 // "c"
2 3 4 2 3 // "d"
99 0 2 3 42 // "e"
由于我们不知道用户每次输入的数字,我不知道如何创建一个动态分配的数组,每次都会创建x个数组..我希望能够访问每个数组a,b,c,d,e的索引,或者有多少数组。
到目前为止,这就是我所拥有的,但由于它不可预测,我在创建数组时遇到了麻烦。我故意不使用向量,因为我并没有真正得到指针的工作原因所以我正试着玩它。
int* x;
int length, numbers;
cin >> length;
x = new int[length]
for (int i=0;i<length;i++)
{
std::getline(std::cin, numbers); //this didn't work for me
x[i] = numbers
}
如果有什么不清楚的地方,请告诉我!谢谢!
答案 0 :(得分:0)
它没有获得第一行。它一次获得1个整数,因为每行有5个整数,并且在第一行中输入5,所以最终只得到第一行中的数字。代码中的x
是一个整数数组,它需要为所有整数提供足够的位置,在本例中为25.如果保证每行5个整数,则可以假设分配5 * length
整数漫长的地方会奏效。你还需要一个内部for循环。 1 for
循环遍历行,另一个循环遍历行上的每个整数。
答案 1 :(得分:0)
我建议像这样使用cin:
int d;
while(cin){
cin >> d;
// Do something with d
if(cin.peek() == '\n'){
// Create a new row in your dynamic array
}
}
这将抓住每个数字到空格。
实现此目的的另一种方法是使用getline()
与string.empty()
结合使用的字符串来获取每一行,然后使用strtok
将该行拆分为标记。虽然getline
仅适用于字符串,但strtok
会将字符串拆分为标记,然后可以将其转换为int(或使用atoi)。
要存储这些令牌,您需要使用vector,因为它们本质上是动态的,并且可以轻松调整大小以满足任何需要。我想see this discussion关于多维向量。