gpt4 book ai didi

C、打印二维动态分配数组

转载 作者:太空宇宙 更新时间:2023-11-04 08:32:46 25 4
gpt4 key购买 nike

我在打印二维数组时遇到问题。为矩阵分配内存并用 0 填充后,无法打印。这是我的代码。我以前这样做过并且工作得很好,但现在我看不出问题所在。

int _tmain(int argc, _TCHAR* argv[])
{
int m, n, num;
float **tab1 = NULL;
for (;;)
{

printf("\n1. Nowy budynek");
printf("\n2. Wyswietl moc pobierana w pomieszczeniach");
printf("\n3. Wlacz swiatlo");
printf("\n4. Wylacz swiatlo");
printf("\n0. Exit\n");
scanf_s("%d", &num);

if (num == 1)
{
do{
printf("Podaj liczbe kondygnacji: ");
scanf_s("%d", &m);
} while (m < 0);
do{
printf("Podaj liczbe pomieszczen: ");
scanf_s("%d", &n);
} while (n < 0);
tworzenie(m, n);
}
for (int i = m - 1; i >= 0; i--)
{
for (int j = 0; j < n; j++)
{
printf("%10.2f", tab1[i][j]);
}
printf("\n");
}
if (num == 2)
{
if (tab1 == NULL)
{
printf("\n Brak budynku! Stworz nowy.\n");
}
else
wyswietlanie(tab1, m, n); <- it crashes here.
}
if (num == 3)
{
if (tab1 == NULL)
{
printf("\n Brak budynku! Stworz nowy.\n");
}
else
wlaczanie(tab1, m, n);
}
if (num == 4)
{
if (tab1 == NULL)
{
printf("\n Brak budynku! Stwórz nowy.");
}
//else
//wylaczanie(tab1,m, n);
}
if (num == 0)
{
// exit(tab1,m, n);
}
}


return 0;

这里是创建表:

float** tworzenie(int m, int n)
{
float **tab1;

tab1 = (float**)malloc(m * sizeof(float*));
for (int i = 0; i < n; i++)
{
tab1[i] = (float*)malloc(n * sizeof(float));
}


for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
tab1[i][j] = 0;
}
}
return tab1;
}

在这里,打印(颠倒):

void wyswietlanie(float **tab1, int m, int n)
{
for (int i = m - 1; i >= 0; i--)
{
for (int j = 0; j < n; j++)
{
printf("%10.2f", tab1[i][j]);
}
printf("\n");
}
}

最佳答案

这是主要问题

if (num == 1)
{
do{
printf("Podaj liczbe kondygnacji: ");
scanf_s("%d", &m);
} while (m < 0);
do{
printf("Podaj liczbe pomieszczen: ");
scanf_s("%d", &n);
} while (n < 0);
/* tworzenie(m, n); this is wrong, must be */
tab1 = tworzenie(m, n);
}

此外,

tab1 = (float**)malloc(m * sizeof(float*));
for (int i = 0; i < n; i++)
{
tab1[i] = (float*)malloc(n * sizeof(float));
}

malloced m float * 指针,并遍历 n,将其更改为

tab1 = (float**)malloc(m * sizeof(float*));
for (int i = 0; i < m; i++)
{
tab1[i] = (float*)malloc(n * sizeof(float));
}

关于C、打印二维动态分配数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27556295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com