【问题标题】:Printing an struct that includes an 2d array打印包含二维数组的结构
【发布时间】:2015-03-15 04:39:50
【问题描述】:

已编辑 我想要做的是(在从文件中读取并将信息放入结构中定义的二维数组之后,该部分有效)调用一个方法来确定数组中是否有任何零,如果是则更改并打印它再次。我知道我缺少指针,但我不知道在哪里。提前致谢。

struct matrix{
const static int N=9;
int Ar[N][N];
};

void iprint(matrix s){ //my method to print the array
    for(int i = 0; i < 9; i++) {
        for(int j = 0; j < 9; j++) {
            cout << (s).Ar[i][j] << ' ';
        }
        cout << endl;
    }
}

bool annotation(matrix s, int row, int column, int num){
    if(s.Ar[row][column] == 0){
        (s).Ar[row][column] = num;
        return true;
    }
    else if(s.Ar[row][column] != 0){
        cout << "NO" << endl;
        return false;
    } else {
        cout << "No" << endl;
        return false;
    }
    iprint(s);
}

数组排在第一位:

0 0 6 5 0 0 1 0 0
4 0 0 0 0 2 0 0 9
0 0 0 0 3 0 0 0 8
0 7 0 1 0 0 5 0 0
0 8 0 0 0 0 0 6 0
0 0 3 0 9 0 0 4 0
2 0 0 0 4 0 0 0 0
9 0 0 7 0 0 0 0 3
0 0 5 0 0 8 2 0 0

我在这些方法之后得到的输出(调用方法annotation(s,1,1,2);

2686428 0 0 2686524 8989288 4733208 0 0 -17974607
1 0 4201360 4662484 0 8989288 8989340 9005760 0
.
.
.

我从文件中读取数组,方法是

bool readMatrix(matrix s){
ifstream f;
f.open("nuMatrix.txt");
if (f.is_open()) {
    while(!f.eof()){
    for(int i=0;i<9;i++){
        for(int j=0;j<9;j++){
            f>>(s).Ar[i][j];
            }
        }
    }
    f.close();
    iprint(s);
    return true;
}
else {
    cerr << "NO";
    return false;
}

}`

【问题讨论】:

  • 首先如何读取数组?
  • 当你在 if 和 else 中都有 return 时,iprint(s) 有什么用处
  • 应该输出是什么?
  • 输出应该是同一个数组但是改变了s.Ar[1][1]=2

标签: c++ struct multidimensional-array


【解决方案1】:

您传递给readMatrixannotation 的矩阵不会被函数修改。
您正在按值传递矩阵,因此您只是在修改它的副本。

更改您的函数以将 reference 指向matrix

bool annotation(matrix& s, int row, int column, int num)
bool readMatrix(matrix& s)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-17
    • 1970-01-01
    • 1970-01-01
    • 2018-05-09
    • 2020-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多