用户输入2D数组(C )
User input in 2D array (C++)
当我打印以检查时,为什么for循环不会在2D数组中保存正确的值。有什么想法吗?
#include <iostream>
using namespace std;
int row, col;
int main()
{
int num;
int val[row][col];
cout << "How many rows are there?" << endl;
cin >> row;
cout << "How many columns are there?" << endl;
cin >> col;
cout << "Enter values for the matrix: " << endl;
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
cin >> val[i][j];
}
}
return 0;
}
#include <iostream>
using namespace std;
int main()
{
int row, col;
cout << "How many rows are there?" << endl;
cin >> row;
cout << "How many columns are there?" << endl;
cin >> col;
cout << "Enter values for the matrix: " << endl;
// check if row and col > 0
int* val = new int[row * col];
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
cin >> val[i * col + j];
}
}
delete[] val;
return 0;
}
这不做您认为的事情。首先,在程序启动时,row
和col
在零下进行了零置化。然后,您有int val[row][col];
,它不是有效的C ,而是C变量长度数组。由于此时row
和col
都是0,因此此数组的长度为零。
在循环中,您会读取一堆值,覆盖堆栈上的内容并导致不确定的行为。
您应该使用动态分配的东西,例如std::vector
或您选择的数学库中的适当矩阵类。通常不建议使用动态分配(ALI建议的new int[row * col]
(,因为以这种方式获得内存泄漏非常容易,尤其是在涉及异常的情况下。
如果将在C 中支持可变长度阵列,则可以通过移动来编写想要的内容:
int val[row][col];
到已知行和col的点。检查此帖子:为什么变量长度阵列不是C 标准的一部分? 否则,您的代码具有不确定的行为。您应该使用动态分配。
首先,你不能有
int val[row][col];
行和col之前具有已知值。其次,这种2D阵列初始化仅是c。
中的标准配置。您需要使用C 运算符new [](类似于C中的Malloc函数(手动分配堆上的数组。但是,这不是惯用的C ,而语言的全部要点是避免这样做,这就是为什么我不会解释如何做。
完成您想要的工作的适当方法是使用std :: vector,围绕C样式数组的功能非常强大的包装器自动分配并为您分配内存(以及许多其他东西(。<<<<<<<<<<<<<<<<<<<<
这是做到这一点的最简单方法:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int row;
cout << "How many rows are there?" << endl;
cin >> row;
int col;
cout << "How many columns are there?" << endl;
cin >> col;
int num;
cout << "Enter values for the matrix: " << endl;
cin >> num;
vector<vector<int>> values(col); //initialize outer vector with col inner vectors
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
values[i].push_back(num);
}
}
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
cout << values[i][j];
}
cout << endl;
}
return 0;
}
另外,我建议您以更多的含义命名您的变量,并且您避免使用名称空间std。
编辑:从您接近程序的方式来看,我认为您对C熟悉C./p>
相关文章:
- 检查TCHAR数组输入是否为带符号整数C++
- C++数组输入不接受一定数量的整数
- 为什么我的代码无法处理大型数组输入(>10000)?
- 我正在努力处理多维数组输入和输出,我管理输入,但是打印无法按计划工作
- 使用无符号字符数组输入十六进制数
- C++用用户输入在循环中填充 char 数组:输入整个字符串时到底发生了什么?
- 如何从用户获取数组输入
- C 2x2数组输入线
- 字符数组输入限制
- 将字符串数组输入到函数C++
- C++:如何将普通话(字符串)分配给用户使用数组输入的数字 &运算符问题
- 数组排序、数组输入、数组输出
- 将字符数组输入stdin
- 如何在 c++ 中为对象数组输入字符串
- 如何在c++ mex文件中访问多维数组输入
- 读取文件并将其作为整型数组输入
- 从c++文件中获取输入(矩阵数组输入)
- 数组输入不工作
- 函数结构数组输入cin问题
- 结束数组输入(c++行业标准)