Пытаюсь вывести введённую матрицу
На выходе получается не то что я ожидаю. Я еще новичок, и не могу понять в чем проблема. Заранее спасибо)
#include <locale.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
void printm(int **matrix, int n, int m) {
int end = n - 1;
for (int i = 0; i < n; i++) {
if (i == end) {printf("\\");} else {
i == 0 ? printf("/") : printf("|");}
for (int j = 0; j < m; m++)
printf(" %d ", matrix[i][j]);
if (i == end) {printf("/");} else {
i == 0 ? printf("\\\n") : printf("|\n");}
}
}
int main() {
setlocale(LC_ALL, "");
srand(time(NULL));
int n, m;
printf("введите размер матрицы:\n");
printf(" n: "); scanf("%d", &n);
printf(" m: "); scanf("%d", &m);
int **matrix = (int**) calloc (n, sizeof(int*));
for (int i=0; i<n; i++)
matrix[i] = (int*) calloc (m, sizeof(int));
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
matrix[i][j] = rand() % 100 + 1;
}
}
printm(matrix, n, m);
return 0;
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Первое - всегда пишите нормально форматированный код. В нем куда легче разобраться.
Ваша главная ошибка -
for (int j = 0; j < m; m++)
Сами подумайте - остановится ли когда-нибудь такой цикл? Что надо увеличивать - счетчик или предельное значение?
Ну и для выравнивания следует указать ширину вывода чисел. У вас максимальное значение - 100, значит, ширины 3 должно хватить.
void printm(int **matrix, int n, int m)
{
int end = n - 1;
for (int i = 0; i < n; i++)
{
if (i == end)
{
printf("\\");
}
else
{
i == 0 ? printf("/") : printf("|");
}
for (int j = 0; j < m; j++)
{
printf(" %3d ", matrix[i][j]);
}
if (i == end)
{
printf("/");
}
else
{
i == 0 ? printf("\\\n") : printf("|\n");
}
}
}
Теперь это то, что вы хотели?