无法在 C 中打印用户定义的函数
Posted
技术标签:
【中文标题】无法在 C 中打印用户定义的函数【英文标题】:Can't Print User Defined Function in C 【发布时间】:2018-11-06 18:14:25 【问题描述】:每次我尝试打印用户定义函数的返回值时,我的代码都无法打印该值。
#include <stdio.h>
#include <stdlib.h>
int n;
int *d = NULL;
int **M = NULL;
int **P = NULL;
int minimult(int n, int *d, int **P)
int i, j, k, diagonal;
for (i = 1; i <= n; i++)
M[i][i] = 0;
for (diagonal = 1; diagonal <= n - 1; diagonal++)
for (i = 1; i <= n - diagonal; i++)
j = i + diagonal;
int *min = NULL;
M[i][j] = min[0];
for (k = i; k < j; k++)
min[k] = (M[i][k] + M[k + 1][j] + d[i - 1] * d[k] * d[j]);
if (min[k] < min[k + 1])
M[i][j] = min[k];
else
M[i][j] = min[k + 1];
return **M;
return **P;
void order(int i, int j)
int k;
if (i == j)
printf("A%d\n", i);
else
k = P[i][j];
printf("(");
order(i, k);
order(k + 1, j);
printf(")");
int main()
int i, j;
int input;
printf("Write the size of matrices.\n");
scanf("%d", &n);
M = malloc(sizeof(int*)*n);
for (i = 0; i < n; i++)
M = malloc(sizeof(int)*n);
printf("Input array d with %d elements.\n", n + 1);
d = malloc(sizeof(int)*n);
for (i = 0; i < n; i++)
scanf("%d", &input);
d[i] = input;
free(M);
free(d);
int minimult(int n, int *d, int **P);
printf("The minimum size of multiplication is,\n");
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
printf("%d\n", M[i][j]);
void order(i, j);
system("pause");
return 0;
当我运行代码时,我只能看到:
写出矩阵的大小。
(扫描)
带有 (inputOfScanf) 个元素的输入数组 d。
(扫描)
乘法的最小尺寸是,
...程序结束。
我做错了什么?
如何查看数组M和order函数的解?
【问题讨论】:
你在free
d 之后使用M
吗?你也不要调用函数,你只需声明它们。
为什么要在打印内容之前打电话给free(M)
?
在一个不相关的问题上,一个函数不能有多个返回值。一旦到达单个return
语句,它将立即从函数返回。将无法实现任何可能的后续返回。
另外,循环内的M = malloc(sizeof(int)*n);
是错误的。你想要M[i] = malloc(sizeof(int)*n);
总而言之,你有很多问题,似乎你只是在猜测,而不是真正了解它们。因此,在继续之前,请回到最开始,买几本书(甚至去上课)并好好学习。
【参考方案1】:
我强烈建议您开始时要简单得多。您提供的程序中发生了很多事情,但正如 @Some 程序员老兄在 cmets 中指出的那样,问题比缺乏输出更为根本。
例如,从这个开始,这是你程序的一小部分:
#include <stdlib.h>
#include <stdio.h>
int main(void)
int i;
int n;
int **M = NULL;
printf("Write the size of matrices.\n");
scanf("%d", &n);
M = malloc(sizeof(int*)*n);
for (i = 0; i < n; i++)
M = malloc(sizeof(int)*n);
for (i = 0; i < n; i++)
printf("matrix element #%d is %d\n", i, *M[i]);
运行时,此段错误在第二个循环内,试图访问*M[i]
。这是因为,正如其中一位 cmets 指出的那样,在您真正想要的第一个循环中:
M[i] = malloc(sizeof(int)*n);
通过此修复程序,程序运行并输出例如:
Write the size of matrices.
5
matrix element #0 is 0
matrix element #1 is 0
matrix element #2 is 0
matrix element #3 is 0
matrix element #4 is 0
从那里,您可以一次添加一点,并通过打印出所有内容来验证正在发生的事情是您期望发生的事情。最终,随着您的继续,您将能够删除一些较早的打印输出语句,以便输出只关注您最近添加或修改的部分。
您可以慢慢构建备份您尝试编写的函数,但您需要先了解许多基础知识。 从简单开始,添加少量内容,然后输出所有内容。这将帮助您理解您的代码,并让您了解哪里出了问题。
【讨论】:
感谢您向我展示如何处理数组问题!我将尝试根据您的建议逐步添加一些代码。以上是关于无法在 C 中打印用户定义的函数的主要内容,如果未能解决你的问题,请参考以下文章