У меня есть таблица, но теперь я не могу сравнить значение и заменить его при правильном размещении матрицы

#c #matrix #compare

#c #матрица #Сравнить

Вопрос:

я делаю программу, в которой есть матрица, которая инициализируется номерами строк и точек, где (где находится поле).

Итак, начальное состояние должно быть:

 5:......
4:......
3:......
2:......
1:......
  abcdef
 

Пространства сетки :

                      {"a5", "b5", "c5", "d5", "e5", "f5"},
                     {"a4", "b4", "c4", "d4", "e4", "f4"},
                     {"a3", "b3", "c3", "d3", "e3", "f3"},
                     {"a2", "b2", "c2", "d2", "e2", "f2"},
                     {"a1", "b1", "c1", "d1", "e1", "f1"}.
 

И если, например, я ввожу a5, результат должен быть:

 5:X.....
4:......
3:......
2:......
1:......
  abcdef
 

Мой текущий код таков:

 int main ()
{
    //definir tabuleiro
  int linhas = 5;
  int colunas = 6;
  char tabuleiro [linhas][colunas];
  char input [80];
  // Definir as posições do tabuleiro
  char coordenadacolaux;
  char coordenadalinaux;
  int coordenadalin ;
  int coordenadacol ;
  printf("%d is col, %d is lnn", coordenadacol, coordenadalin);
    //Preencher o tabuleiro com '.'
  memset(tabuleiro, '.', sizeof tabuleiro);
  scanf("%s",input);
  coordenadacolaux = input[0];
  coordenadalinaux = input[1];
  printf("%d is col, %d is lnn", coordenadacol, coordenadalin);
  switch (coordenadacolaux)
 {
    case 'a':
      coordenadacol = 0;
      printf("In a n");
      printf("a is %d n",coordenadacol);
      break;

    case 'b':
      coordenadacol = 1;
      printf("In bn");
      printf("b is %d n",coordenadacol);
      break;
      
    case 'c':
      coordenadacol = 2;
      printf("In cn");
      printf("c is %d n",coordenadacol);
      break;
    
    case 'd':
      coordenadacol = 3;
      printf("In dn");
      printf("d is %d n",coordenadacol);
      break;
    
    case 'e':
      coordenadacol = 4;
      printf("In en");
      printf("e is %d n",coordenadacol);
      break;
    default: 
    printf("Casa invalida.");
}
    //cast = tranformar char em int
    coordenadalin = (int) coordenadalinaux;
    printf("%c is col, %c is lnn", coordenadacol, coordenadalin);
   tabuleiro[coordenadacol][coordenadalin] = 'X';
  for(int count=5, i=0; i<linhas; i  , count--)
  {
      
    printf("%d:", count) ; 
    for(int j=0; j<colunas; j  )
    {
      printf("%c", tabuleiro[i][j]);
    }
    printf("n");
  }
  printf("  abcdef");
}
 

Но я застрял и, похоже, не могу найти, с чего мне начать, позволяет ли то, что я сделал, продолжить то, что я хочу сделать?
Самый большой вопрос для меня: как мне сравнить входную строку с пространством массива, которое я хочу заменить?

С наилучшими пожеланиями, Алегор

Комментарии:

1.Вы делаете: scanf("%s",input); это неверно, потому input что это int . Скомпилируйте с включенными предупреждениями (например -Wall ), и это будет помечено компилятором. Тогда вы фактически никогда ни для чего не используете input . Я предполагаю, что вы хотите input содержать ссылку на сетку (например a5 ). Итак, вы хотите: char input[100];

2. После исправления вышеизложенного вам может потребоваться: int colcur = input[0] - 'a'; int rowcur = input[1] - '0'; rowcur = linhas - rowcur; tabuleiro[rowcur][colcur] = 'X'; (т. е. Я не уверен, нужен ли отдельный массив символов для декодирования координат). Обратите внимание, что вы должны проверить input[0] , чтобы быть в диапазоне 'a'-'f' , а это input[1] в диапазоне: '1'-'5' перед фактическим индексированием в массив.

3. Я воспользовался некоторыми вашими советами и использовал переключатель для первой буквы, но каким-то образом значение, сохраненное в «регистре», исчезает, когда оно покидает функцию переключения.