C 为什么写这个程序会输出奇怪的字符串?

C 为什么写这个程序会输出奇怪的字符串?,c,C,我正在尝试用C语言编写“扫雷者”代码。我首先将值赋给一个2D数组,然后将其打印出来。我什么都试过了,但没用 这发生在我的示例输出中: 代码是: #include <stdio.h> #include <stdlib.h> struct Tile { unsigned char isMine : 1; char status; }; int main() { struct Tile arr[9][9]; unsigned char i;

我正在尝试用C语言编写“扫雷者”代码。我首先将值赋给一个2D数组,然后将其打印出来。我什么都试过了,但没用

这发生在我的示例输出中:

代码是:

#include <stdio.h>
#include <stdlib.h>

struct Tile {
    unsigned char isMine : 1;
    char status;
};

int main() {
    struct Tile arr[9][9];
    unsigned char i;
    unsigned char c;
    unsigned char count = 10;
    srand((unsigned)time(0));
    for (i = 0; i < 9; i++) {
        for (c = 0; i < 9; i++) {
            if(rand() % 81 + 1 < count && arr[i][c].isMine == 0 && count > 0) {
                arr[i][c].isMine = 1;
                arr[i][c].status = 'X';
                count--;
            } else if (arr[i][c].isMine == 0) {
                arr[i][c].status = '.';
            }
        }
        if (count == 0) {
            break;
        } else {
            continue;
        }
    }
    for (i = 0; i < 9; i++) {
        for (c = 0; c < 9; c++) {
            printf("%c", arr[i][c].status);
        }
        printf("\n");
    }
    return 0;
}
#包括
#包括
结构砖{
无符号字符:1;
字符状态;
};
int main(){
结构瓦arr[9][9];
无符号字符i;
无符号字符c;
无符号字符数=10;
srand((未签名)时间(0));
对于(i=0;i<9;i++){
对于(c=0;i<9;i++){
如果(rand()%81+10){
arr[i][c].isMine=1;
arr[i][c]。状态='X';
计数--;
}else if(arr[i][c].isMine==0){
arr[i][c]。状态=';
}
}
如果(计数=0){
打破
}否则{
持续
}
}
对于(i=0;i<9;i++){
对于(c=0;c<9;c++){
printf(“%c”,arr[i][c]。状态);
}
printf(“\n”);
}
返回0;
}
请提供帮助。

初始化阵列:

struct Tile arr[9][9] = {{0}};
否则,您将在以下位置读取未初始化的值(导致未定义的行为):


由于循环标题不正确,您从未访问循环中除第1列以外的任何字段:

(i=0;i<9;i++)的
{
对于(c=0;i<9;i++){
如果(rand()%81+10){
arr[i][c].isMine=1;
arr[i][c]。状态='X';
计数--;
}else if(arr[i][c].isMine==0){
arr[i][c]。状态=';
}
}
如果(计数=0){
打破
}否则{
持续
}
}
这将使所有其他字段未初始化,当您尝试打印它时,可能会出现奇怪的情况

此外,由于每个字段只访问一次(或者至少这似乎是您的意图),因此根本不需要检查
isMine
。如果正确初始化,则它必须为0

这当然需要你像大卫的回答中提到的那样适当地初始化

在第一部分(
。+10
)中,该条件可以稍微降低。无需再次检查

最后,
继续
,因为循环的最后一条指令并不是真正有用的

您的代码可能如下所示:

struct Tile arr[9][9]={{0};;
...
对于(i=0;i<9;i++){
对于(c=0;c<9;c++){
如果(rand()%81+1