我正在编写这个简单的代码,用于自己设置矩阵并显示它。当我执行这个程序时,它在第一行给出了垃圾值。那个怎么样?我的程序中有错误吗?
#include<iostream>
using namespace std;
void setOneMatrix();
//void getOneMatrix(int mat[6][5]);
int display(int mat[6][5]);
int main() {
int setMat[6][5]={};
setOneMatrix();
display(setMat);
}
void setOneMatrix() {
/*int setMat[6][5] = {1,2,3,4,5,
6,7,8,9,10,
11,12,13,14,15,
16,17,18,19,20,
21,22,23,24,25,
26,27,28,29,30};*/
int setMat[6][5] = {{1,2,3,4,5},
{6,7,8,9,10},
{11,12,13,14,15},
{16,17,18,19,20},
{21,22,23,24,25},
{26,27,28,29,30}};
}
int display(int mat[6][5]) {
int i,j,setMat[6][5];
for(i=0;i<6;i++){
for(j=0;j<5;j++) {
cout << setMat[i][j] << "\t";
}
cout << endl;
}
}
输出:
4665744 4687848 6946296 4257625 0
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
答案 0 :(得分:2)
很抱歉这么说,但你的整个程序有不明确的行为!这是我的输出:
int main()
{
path_data my_path[41];
enemy_data_array enemies;
enemies.size = 0;
add_enemy(&enemies);
}
除了第一行之外,你很幸运地打印了这些数字。这应该不会发生,请参阅我的输出。
一些事实:
-858993460 -858993460 -858993460 -858993460 -858993460
-858993460 -858993460 -858993460 -858993460 -858993460
-858993460 -858993460 -858993460 -858993460 -858993460
-858993460 -858993460 -858993460 -858993460 -858993460
-858993460 -858993460 -858993460 -858993460 -858993460
-858993460 -858993460 -858993460 -858993460 -858993460
setMat
只包含main
。
0
未初始化setOneMatrix
中的setMat
,它只是初始化另一个main
。这个功能基本上什么也没做。 setMat
稍微好一些,因为您将displayMath
传递给它,但该功能甚至使用 setMat
,它只是创建另一个数组setMat
并打印出该数组。该数组未初始化,因此它包含垃圾值。
所以当你打印它时,你可以得到任何东西!
(它也不会返回mat
,因此该程序已经格式不正确,为什么要这样做?只需让它返回int
。)
答案 1 :(得分:1)
您的代码中存在一些错误。
1.“显示”功能必须返回一个值。你错过了。而不是返回一个值,只需将其更改为“void”函数。
2.在函数setOneMatrix()中重新定义矩阵“setMat”。这意味着main()中的矩阵“setMat”和函数setOneMatrix()中的矩阵“setMat”在计算机内存中的地址不同。当您尝试打印矩阵时,只需在main()中打印矩阵即可。而它的元素的价值就是垃圾。
答案 2 :(得分:0)
下面, 我更正了你的代码
#include<iostream>
using namespace std;
int mat[6][5]; //Global variable, you can access this anywhere in your program
void init_mat();
void setOneMatrix();
void display(int mat[6][5]);
int main() {
init_mat(); /* Init mat array */
setOneMatrix();
display(mat);//Pass array that is global as argument
}
void init_mat()
{
//Give fields in array default value
//Easyer to do field by field
for (int i = 0; i < 6; i++)
for (int j = 0; j < 5; j++)
mat[i][j] = 0;
}
void setOneMatrix() {
/*int setMat[6][5] = { { 1,2,3,4,5 },
{ 6,7,8,9,10 },
{ 11,12,13,14,15 },
{ 16,17,18,19,20 },
{ 21,22,23,24,25 },
{ 26,27,28,29,30 } };*/
//Now you need to set value of fields field by field,
for (int i = 0; i < 6; i++)
for (int j = 0; j < 5; j++)
mat[i][j] = 1+i*5+j;
}
void display(int pMat[6][5]) {
int i, j;
for (i = 0; i<6; i++) {
for (j = 0; j<5; j++) {
cout << pMat[i][j] << "\t";
}
cout << endl;
}
}