读取和显示矩阵

时间:2014-04-19 19:20:41

标签: c

我遇到这个问题的一个小问题,我真的可以使用另一组眼睛。我基本上试图读取我输入的矩阵然后显示所述矩阵。

程序总是返回一个空矩阵(所有位置都为0)。矩阵的大小(列/行)很好。我做错了什么?

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

#define MAXN 10

void display_matrix(int n, int m, double a[MAXN][MAXN], char ch)
{
    int i, j;

    printf("\n MATRIX %c\n", ch);
    for(i = 0; i < n; i++)
    {
        for(j = 0; j < m; j++) printf("%8.2lf ",a[i][j]);
        printf("\n");
    }
}

void read_matrix(int *n, int *m, double a[MAXN][MAXN])
{
     int i,j;
     printf("\nInput of size and elements of a matrix\n");
     printf("\n\tNumber of rows, n=");
     scanf("%d", n);
     printf("\n\tNumber of columns, m=");
     scanf("%d", m);
     printf("\n\tThe elements of the matrix\n");
     for (i = 0; i < *n; i++)
     {
         for(j = 0; j < *m; j++)
         {
            printf("a[%d,%d]=", i, j);
            scanf("%lf",&a[i][j]);
         }
     }
     printf("\n");
}

void main()
{
    int n, m;
    double a[MAXN][MAXN];
    read_matrix(&n, &m, a);
    display_matrix(n, m, a, 'X');
    return 0;
}

1 个答案:

答案 0 :(得分:2)

您的代码看起来很好(main()的返回类型应为int,您应该始终检查scanf()的返回值,除了以下行: / p>

printf("%8.2lf ",a[i][j]);

在C99标准之前,l修饰符未与f转换说明符一起定义。结合使用这两个导致未定义的行为。我不知道可能性是多少,但是你有一个行为不当或实现%lf的前C99 C库来匹配完全不同的东西,可能是long double,这是不可想象的。

要打印双精度数,您应该使用%f转换说明符:

printf("%8.2f ",a[i][j]);

这只是抓着稻草。它可能对你没有任何改变。

背景

scanf()函数对float%f)和double%lf)有不同的转换说明符,因为它需要知道确切的类型相应的指针参数指向。

但是当您将float传递给可变参数函数(例如printf())时,默认参数提升会将float转换为double }。因此,printf()函数不需要float的转换说明符,因为无法将float传递给它。 C99标准添加了l修饰符,仅用于scanf()函数的对称性。

参考