我正在打印4x4矩阵的调试语句。有没有人知道不用cout就能做到这一点的更好方法
// 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] ) ;
}预处理器的超级加分!
发布于 2009-10-04 13:20:05
这样如何:
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(" ");
}
}
}发布于 2009-10-04 13:58:58
这位(Wo)人说,基于预处理器的解决方案的超级加分。让我们开始吧,非常感谢所有帮助我做到这一点的人。
#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);
}请注意,这并不能真正反映我所说的好的解决方案。
发布于 2009-10-04 13:19:21
这是一种简单的方法,只需用printf替换cout!虽然我更喜欢C++ streams,因为它们更优雅:
#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);
}https://stackoverflow.com/questions/1516358
复制相似问题