关于#c++#的问题,希望大家帮帮我!

又一次报错!!

#include
#include
using namespace std;
const char *a[11][11];
int main() {
    int i{ 0 }, j{ 0 };
    for (; i <= 10; i++) {
        for (; j <= 10; j++) {
            if (rand() % 10 > 2) {
                a[i][j] = '0';
            }
            else {
                a[i][j] = '?';
            }

        }
    }
    for (; i <= 10; i++) {
        for (; j <= 10; j++) {
            printf(a[i][j]);
        }
    }
}

img

代码如下:


#include<iostream>
#include<random>
using namespace std;

int main() {
    char a[11][11];
    int i,  j;
    for (i = 0; i <= 10; i++) {
        for (j = 0; j <= 10; j++) {
            if (rand() % 10 > 2) {
                a[i][j] = '0';
            }
            else {
                a[i][j] = '?';
            }
        }
    }

    for (i=0; i <= 10; i++) {
        for (j=0; j <= 10; j++) {
            printf("%c ", a[i][j]);
        }
        printf("\n");
    }
}

const char *a[11][11];
应该是char a[11][11];啊,干嘛用指针。const又为啥要加呢?

在您的代码中,变量i和j都已经在上一个循环中被赋值为10,所以在后面的循环中i和j的值都是10。因此,您可能会看到错误消息“段错误”或“越界”。

为了解决这个问题,您可以在循环的末尾重置i和j的值。例如:

for (i = 0; i <= 10; i++) {
for (j = 0; j <= 10; j++) {
if (rand() % 10 > 2) {
a[i][j] = '0';
}
else {
a[i][j] = '?';
}
}
}

for (i = 0; i <= 10; i++) {
for (j = 0; j <= 10; j++) {
printf(a[i][j]);
}
}

希望这些建议能帮到您。

const char *a[11][11];
改为
char a[11][11];