首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >4x4矩阵的调试语句

4x4矩阵的调试语句
EN

Stack Overflow用户
提问于 2009-10-04 12:59:32
回答 6查看 522关注 0票数 0

我正在打印4x4矩阵的调试语句。有没有人知道不用cout就能做到这一点的更好方法

代码语言:javascript
复制
// num decimal places to show
void print( int decimals )
{
    char fmtString[ 300 ] ;

    // I'm thinking this should be able to get smaller.
    sprintf(fmtString,
            "%%.%df %%.%df %%.%df %%.%df\n"
            "%%.%df %%.%df %%.%df %%.%df\n"
            "%%.%df %%.%df %%.%df %%.%df\n"
            "%%.%df %%.%df %%.%df %%.%df",
            decimals, decimals, decimals, decimals, 
            decimals, decimals, decimals, decimals, 
            decimals, decimals, decimals, decimals, 
            decimals, decimals, decimals, decimals ) ;

    printf(fmtString,
           m[0][0], m[0][1], m[0][2], m[0][3],
           m[1][0], m[1][1], m[1][2], m[1][3],
           m[2][0], m[2][1], m[2][2], m[2][3],
           m[3][0], m[3][1], m[3][2], m[3][3] ) ;
}

预处理器的超级加分!

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-10-04 13:20:05

这样如何:

代码语言:javascript
复制
void print( int decimals = 2 )
{
    int dimension = 4;
    for(int i = 0; i < dimension; i++) {
        for(int j = 0; j < dimension; j++) {
            printf("%.*f", decimals, matrix[i][j]);
            if(j == dimension - 1) printf("\n");
            else                   printf(" ");
        }
    }
}
票数 4
EN

Stack Overflow用户

发布于 2009-10-04 13:58:58

这位(Wo)人说,基于预处理器的解决方案的超级加分。让我们开始吧,非常感谢所有帮助我做到这一点的人。

代码语言:javascript
复制
#include <stdlib.h>
#include <stdio.h>

#define MADU(matrix,decimals,dimension) ({ \
    for(int i = 0; i < dimension; i++) { \
        for(int j = 0; j < dimension; j++) { \
            printf("%.*f%c", decimals, matrix[i][j],(j==dimension-1)?'\n':' '); \
        } \
    } \
})

/*
 * 
 */
int main(int argc, char** argv) {
    double a[4][4];

    MADU(a,2,4);

    return (EXIT_SUCCESS);
}

请注意,这并不能真正反映我所说的好的解决方案。

票数 3
EN

Stack Overflow用户

发布于 2009-10-04 13:19:21

这是一种简单的方法,只需用printf替换cout!虽然我更喜欢C++ streams,因为它们更优雅:

代码语言:javascript
复制
#include <iostream>
#include <iomanip>

template <std::size_t rows, std::size_t columns>
void printMatrix(double (&matrix)[rows][columns], int dec)
{
    std::cout << std::fixed << std::setprecision(dec);
    for(std::size_t r = 0; r < rows; r++)
    {
        for(std::size_t c = 0; c < columns; c++)
        {
            std::cout << matrix[r][c] << '\t';
        }
        std::cout << '\n';
    }
}

int main()
{
    double matrix[4][4];

    printMatrix(matrix, 2);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1516358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档