*编辑:尽管如此,当第一行输入 3 列,第二行输入 2 列时,在输出中第一行变为 2 元素作为第一行。
使用单独动态分配的列数输出动态分配的装备数量的问题(每个装备的渔获物数量)...也就是说,如果我尝试分配 2 个装备,然后为第一个装备分配两个“渔获物”鱼(两列)和第二个装备三个渔获物,一切都很好....但是如果我尝试为第二行(装备)输入较少数量的列(“渔获物”)然后在输出中“多余第一行的“被“截断”,因此例如,如果第一行有 3 列输入,第二行有 2 列输入,则在输出中只有两列(数字索引)用于两行中的每一行。
#include<iostream>
int main()
{
using namespace std;
int *sum;
int *a = new int;
int *b = new int;
cout << "Total number of equips: ";
cin >> *a;
// Allocate a two-dimensional 3x2 array of ints
int** ippArray = new int*[*a];
for (int i = 0; i < *a+1; ++i) {
ippArray[i] = new int[*b];
}
// fill the array
for (int i = 1; i < *a+1; ++i) {
cout << "Total number of catches for " << i << "th equip : ";
cin >> *b;
cout << "Equip number: " << i << endl;
for (int j = 1; j < *b+1; ++j) {
cout << "Catch number: " << j << endl;
cin >> ippArray[i][j];
ippArray[i][j];
}
}
// Output the array
for (int i = 1; i < *a+1; ++i) {
for (int j = 1; j < *b+1; ++j) {
cout << ippArray[i][j] << " ";
*sum = *sum + ippArray[i][j];
}
cout << endl;
}
cout << endl;
cout << "All catches of the all equipes: " << *sum-3;
// Deallocate
for (int i = 1; i < *a+1; ++i) {
delete [] ippArray[i];
}
delete [] ippArray;
// Keep the window open
cin.get();
return 0;
}
最佳答案
首先,除非确实需要,否则不要将整数转换为指针 (int *a = new int;
)。它使代码更难阅读,如果有人必须维护您的代码,他们会称您为 SCSS 。
第二,int** ippArray = new int*[*a];
结合您执行此操作的多个位置... for (int i = 1; i < *a+1; ++i)
不好。 ippArray 具有从 0 到 *a
的有效引用, 因此它应该是 for (int i = 0; i < *a; ++i)
编辑:尝试这样的事情 http://ideone.com/4egQl3
Edit2:也是标准建议......
{
std::vector<string> advice;
advice.push_back( "These will make your life easier" );
}
// No de-allocation needed!
关于c++ - 第二行列数较少 "cuts off"第一行列数较多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32188309/