5 1256 4323 7687 3244 5678
2 2334 7687
5 2334 5678 6547 9766 9543
上記のフォームに入力することになっています。各行の最初の整数によって、その後に続く整数の数が決まります。最初の整数は変動する可能性があるため、「scanf」で可能かどうかはわかりません。
5 1256 4323 7687 3244 5678
2 2334 7687
5 2334 5678 6547 9766 9543
上記のフォームに入力することになっています。各行の最初の整数によって、その後に続く整数の数が決まります。最初の整数は変動する可能性があるため、「scanf」で可能かどうかはわかりません。
もちろん、次のように行うこともできscanf
ます。
while (scanf("%d", &n) == 1) {
row++;
for (col = 0; col < n; col++)
scanf("%d", &a[row][col]);
}
とほとんど同じcin
です:
while (cin >> n) {
row++;
for (col = 0; col < n; col++)
cin >> a[row][col];
}
より具体的な例として、入力が最大N
行数であるとします。
int** a = new int*[N];
int row = -1; // not started yet
while (cin >> n) {
row++;
a[row] = new int[n];
for (int col = 0; col < n; col++)
cin >> a[row][col];
}
N
事前にわからない場合は、次のように利用することもできstd::vector
ます。
vector<vector<int> > a;
while (cin >> n) {
vector<int> line(n);
for (int col = 0; col < n; col++)
cin >> line[col];
a.push_back(line);
}