我正在尝试将long long矩阵的第一行转换为long double,但是当我打印结果时,它只打印0' s。这是功能:
void convertLLtoLD(long long **B, long double **C, int n){
int i, j;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
C[i][j] = 0;
}
}
for (i = 0; i < n; i++) {
C[0][i] = B[0][i]; //C[0][i] = (long double)B[0][i];
}
for(i = 0; i < n; i++)
printf("%lf ", C[0][i]);
}
这是我在调用函数之前分配C的代码:
long double** C = (long double**)malloc(n * sizeof(long double*));
for (i = 0; i < DIM; i++) {
C[i] = (long double*)malloc(n * sizeof(long double));
}
我用GCC 4.8编译代码。从文件中读取B并且它的值是正确的,因为我在调用函数之前打印它们。即使我在函数内部打印它们,结果也是一样的。当我在评论中使用强制转换时,结果也是一样的。有人可以解释我为什么不工作吗?
由于
答案 0 :(得分:5)
声明中:
printf("%lf ", C[0][i]);
您使用了不正确的说明符(它需要double
)。
使用%Lf
打印long double
,使用%lld
打印long long
。
注意:强>
printf
,而是更喜欢std::cout
和标准库printf
specifiers from en.cppreference.com