Указатель, указывающий старый адрес при печати элементов массива через цикл - PullRequest
0 голосов
/ 19 марта 2020

Я хочу прочитать элементы массива, определенные в основной функции, через другую пользовательскую функцию. Массив является двумерным, и он правильно показывает первые три элемента, но при следующем l oop начинается адрес, на который указывает этот указатель, на 2 шага назад от намеченного адреса. Почему это? Вот основная функция, вызывающая функцию frame (), где проблема заключается в следующем:

void main(){
    char dec,player[2][20];
    int i,counter=0,palo,winner=0;
    for(i=0;i<2;i++){
        printf("Enter Player%d's name: ",(i+1));
        scanf("%s",player[i]);                  //ASK PLAYER NAME
    }
    startAgain:                             //GAME RESTART POINT
    system("cls");
    palo=0;
    char spot[][3]={"123","456","789"};

    //------------------MAIN GAME AREA-------------------------------
    for(counter=0;counter<9;counter++,palo++){
        frame(*spot);
        read(&palo,*spot,*player);
        palo %=2;
    }
}

Вот функция frame ():

void frame(char *count){
    int i,j;
    printf("\t\t\t");
    line(24);
    for (i = 0; i < 3; i++){
        printf("\t\t\t");
        for (j = 0; j < 3; j++){
            printf("|   %c   ",(*(count+i)+j));
        }
        printf("|\n\t\t\t");
        line(24);
    }
}

Предполагаемый результат:

1        2       3
4        5       6
7        8       9

Что отображается:

1        2       3
2        3       4
3        4       5

1 Ответ

0 голосов
/ 19 марта 2020

Облегчите жизнь себе и другим, используйте обычную индексацию массива вместо арифметики указателей c.

    for(counter=0;counter<9;counter++,palo++){
        frame(spot);
        read(&palo,spot,player);
        palo %=2;
    }

...
void frame(char count[][3]){
    int i,j;
    printf("\t\t\t");
    line(24);
    for (i = 0; i < 3; i++){
        printf("\t\t\t");
        for (j = 0; j < 3; j++){
            printf("|   %c   ",count[i][j]);
        }
        printf("|\n\t\t\t");
        line(24);
    }
}
...