我真的很想知道为什么当我使用双精度时这会搞砸我的代码。据我了解,双精度数只是一个更精确的浮点数。然而在下面的代码中,如果我将 float 替换为 double,我会得到一个古怪的输出,即使所有代码所做的只是获取输入并将其吐出。
#include <stdio.h>
int y;
int z;
int i;
int n;
int r;
int c;
float e;
float d;
void main() {
puts("Enter Row Number:");
scanf("%i", &r);
puts("Enter Column Number:");
scanf("%i", &c);
float x[r][c];
int j = r;
for(y = 1; y <= r; y++) {
for(z = 1; z <= c; z++) {
scanf("%f", &x[y][z]);
}
}
for (y = 1; y <= r; y++) {
for(z = 1; z <= c; z++) {
printf("%g\t", x[y][z]);
}
puts("\n");
}
}
在使用浮点数的情况下,在为行输入 2 并为列输入 3 之后,然后是数字 1-6,我得到了 1-6 的输出,正如预期的那样。但是改用双精度并保持输入与以前相同,我得到的输出为 {1.36224e-312,1.78905e-307, 1.81506e-307, 3.15957e+263, 5.3568e-315, 3.44886e-313 }。显然,这甚至不接近正确,而且它不像我在这里处理复数......只是整数1-6。是什么赋予了?