Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中使用“for”循环的迭代变量时出现奇怪的输出_C - Fatal编程技术网

在C中使用“for”循环的迭代变量时出现奇怪的输出

在C中使用“for”循环的迭代变量时出现奇怪的输出,c,C,我目前正在为我大学的第一次考试开发一个简单的海战游戏,但我在游戏板上得到了一个奇怪的输出 它应该迭代我的j变量,但是我得到了那个奇怪的字符 这是我的密码: //CREATES COORDENATES OF THE GAMEBOARD //ATTRIBUTE ONE LETTER TO EACH TRAY LINE for (i=0;i<11;i++){ tabuleiro[i][0] = letra[i-1]; } /

我目前正在为我大学的第一次考试开发一个简单的海战游戏,但我在游戏板上得到了一个奇怪的输出

它应该迭代我的j变量,但是我得到了那个奇怪的字符

这是我的密码:

//CREATES COORDENATES OF THE GAMEBOARD
    //ATTRIBUTE ONE LETTER TO EACH TRAY LINE
        for (i=0;i<11;i++){
            tabuleiro[i][0] = letra[i-1];
        }
    //ATTRIBUTE ONE NUMBER TO EACH TRAY COLUMN
        for (j=1;j<11;j++){
            tabuleiro[0][j] = j;
        }

    //CREATES THE "SEA"
        for (i=1;i<11;i++){
            for (j=1;j<11;j++){
                tabuleiro[i][j] = '~';
            }
        }
我试图改变我的tabulero[0][j]=j;to tabuleiro[0][j]=j+'0';但它只会迭代到9,然后再次给我奇怪的字符

如果我没有错,我认为这与ASCII码有关。如果我错了,请纠正我,但我不知道如何解决这个问题


请你解释一下我该如何解决这个问题。

为了精确控制我建议的角色

tabuleiro[0][j] = "123456789T"[j];
这将从该字符串中选取第j个字符


顺便说一句,您得到“:”的原因是因为“:”是“9”之后的下一个ascii字符-请参见“:”的字符代码是10+“0”=58的字符代码,这是“:”的字符代码。您可以考虑从游戏数组中删除列和行名称。他们只是标签,而不是我认为的游戏的一部分

#define board_size 10

具有绘制游戏板的功能:

void drawBoard(char tabuleiro[board_size][board_size]) {
    // Print top line
    printf("  ");
    for (int col = 0; col < board_size; col++) {
        printf(" %-2d", col+1);
    }
    printf("\n");

    // Print grid
    for (int row = 0; row < board_size; row++) {
        // Print letter
        printf("%c ", 'A' + row);
        // Print board
        for (int col = 0; col < board_size; col++) {
            printf(" %c ", tabuleiro[row][col]);
        }
        printf("\n");
    }
}

你需要发布一篇文章。你写道:我试图改变我的tabulero[0][j]=j;to tabuleiro[0][j]=j+'0';但它只会迭代到9,然后再次给我奇怪的字符。。。是:你提到的那个奇怪的角色?你期待什么来代替这个奇怪的角色?需要更多信息,但是tabuleiro[i][0]=letra[i-1];当i==0时,将得到一个负索引。可能不是您想要的。请不要将文本作为图形发布。因为这是一款基于文本的游戏,你完全可以将内容粘贴为文本。你想在第10列的顶部添加哪个字符?所以我不能只说tabuleiro[1][1]=~当我写printf%c时,tabuleiro[1][1]会将~字符打印回来?因为如果我这样做。。。它用单引号把我打印了5个字符。双引号用于字符串。建议使用字符数组,我认为这也是letra数组。字符算术是一个粗略的东西。不过,对于dez来说,可能要把它改成123456789D。但是:可能不是因为ASCII。更一般地说,这是因为编译器被告知使用或默认使用UTF-8的执行字符集,而终端的编码可能是CP860。从技术上讲,它们应该匹配,但如果程序用户在程序使用的字符上匹配,则可以通过。否-这是因为“:”是9之后的下一个字符,这里没有什么神秘之处
void drawBoard(char tabuleiro[board_size][board_size]) {
    // Print top line
    printf("  ");
    for (int col = 0; col < board_size; col++) {
        printf(" %-2d", col+1);
    }
    printf("\n");

    // Print grid
    for (int row = 0; row < board_size; row++) {
        // Print letter
        printf("%c ", 'A' + row);
        // Print board
        for (int col = 0; col < board_size; col++) {
            printf(" %c ", tabuleiro[row][col]);
        }
        printf("\n");
    }
}