Iván Baca Ответов: 3

Я не могу заставить свою программу на C++ печатать символы в матрице, которую я хочу, чтобы она печатала


Это небольшая версия моей проблемы, в основном, в моей "полной версии" я даю каждому из значений в матрице букву, и я изменяю буквенные значения, печатаю их и т. д.
Все выглядит нормально, за исключением печатной части, поскольку она обычно выплевывает случайный символ ASCII, в зависимости от небольших изменений, которые я делаю в программе, чтобы попытаться заставить ее работать.
Надеюсь, вы сможете мне помочь.

#включить <stdio.h>
#include <stdlib.h>

тап_п(){
матрица символов[2][2]={'X'};
printf("%c",Матрица[2][2]);
}

Что я уже пробовал:

Я перепробовал много вещей, просто чтобы изменить печатное значение на экране.

Кое - что из того, что я пробовал (псевдокод):



"Икс"
"Х"
const char matrix[2][2]
const char *Матрица[2][2]
cout<<Матрица[2][2]

X='X';
Матрица[2][2]={X};

3 Ответов

Рейтинг:
26

OriginalGriff

ГМ...здесь есть несколько вещей.
Во - первых, ваш пример кода показывает, что вы создаете массив элементов 2 x 2, то есть в общей сложности четыре элемента, а затем пытаетесь напечатать девятый элемент этого массива. в C и C++ индексы массивов начинаются с нуля, поэтому массив 2 x 2 будет содержать только допустимые данные в местоположениях

matrix[0][0]
matrix[0][1]
matrix[1][0]
matrix[1][1]

Матрица[2][2] полностью выходит за пределы массива.

Во - вторых, ваш оператор вывода всегда пытается вывести только один элемент из массива-так что даже если индексация была правильной, он никогда не будет печатать все элементы.
Попробуйте использовать вложенные for петли:
for (i = 0; i < sizeOfFirstDimension; i++)
   {
   for (j = 0; j < sizeOfSecondDimension; j++)
      {
      cout << matrix[i][j];
      }
   }
И посмотрим, сработает ли это лучше.


Рейтинг:
2

Afzaal Ahmad Zeeshan

Вы создаете матричный массив 2х2, но даете ему только один элемент. Это вызывает проблему, и программа C просто выплевывает мусорное значение. Считать это,

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

int main(){
    char matrix[2][2] = { {'V', 'X'}, { 'Y', 'Z' }};
    
    printf("Value is: %c\n", matrix[1][1]); // 2nd element of 2nd array.
}

// Output:
// Value is: Z

Вы можете протестировать эту программу на своем компьютере или в интернете по адресу, Бесплатная онлайн IDE и терминал[^]

Кроме того, я также пришел посмотреть, что вы также не очень хорошо справляетесь с обработкой массивов (длина и индекс-это не одно и то же). Если массив имеет размер 5, то последний элемент находится в индексе 4 (индекс начинается с 0). Я могу только рекомендовать еще раз прочитать учебники по Си,
С programming.com - изучение программирования на языках Си и Си++ - Cprogramming.com[^]
C Учебник[^]


Рейтинг:
1

Patrice T

char matrix[2][2]={'X'};

Вот вы заявляете matrix и хранить значение в matrix[0][0]
printf("%c",matrix[2][2]);

matrix[2][2] не существует, C/C++ основан на нуле.

Используйте отладчик, чтобы увидеть, что делает ваш код. Он позволяет выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.