繁体   English   中英

无法在C中打印用户定义的函数

[英]Can't Print User Defined Function in C

每次我尝试打印用户定义函数的返回值时,我的代码都无法打印该值。

#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;
}

运行代码时,我只能看到:

写出矩阵的大小。

(scanf)

具有(inputOfScanf)元素的输入数组d。

(scanf)

乘法的最小大小是

...程序结束。

我做错了什么?

如何查看数组M和阶数函数的解?

我强烈建议您入门要简单得多。 您介绍的程序中发生了很多事情,但是正如@Some程序员老兄在注释中指出的那样,这些问题比缺少输出更根本。

例如,从此开始,这只是程序的一小部分:

#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] 正如评论之一所指出的,这是因为您真正想要的是在第一个循环中:

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

从那里,您可以一次添加一点 ,并通过打印出所有内容来验证正在发生的事情是您期望发生的事情 最终,随着您的前进,您将能够删除一些较早的打印输出语句,以便输出仅集中在您最近添加或修改的部分上。

您可以缓慢地构建要尝试编写的功能,但是首先需要了解许多基础知识。 从简单开始,进行少量添加,然后输出所有内容。 这将帮助您理解您的代码,并让您看到出错的地方。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM