我真的很想知道爲什麼當我使用雙精度時,這會導致我的代碼出現問題。根據我的理解,double是一個更精確的浮點數。然而,在下面的代碼中,如果我用double替換float,那麼即使所有的代碼都在做輸入,然後將其吐出,我也會得到一個古怪的輸出。與浮點數相比,雙產生奇數輸出
#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的輸出,如所預期。但是使用double而不是,並且保持輸入與以前相同,我得到{1.36224e-312,1.78905e-307,1.81506e-307,3.15957e + 263,5.3568e-315,3.44886e-313的輸出}。顯然,這甚至不是正確的,它不像我在這裏處理複數......只是整數1-6。是什麼賦予了?
如果你使用double,你需要用'%lf'來讀取輸入 – nhahtdh
當你定義一個像'x [r] [c]'這樣的數組時,該數組中的有效索引是'0'..'r-1 '和'0'..'c-1'。 –
我很驚訝你的代碼不會產生分段錯誤,因爲你從1 ... r(r是數據結構的大小)進行迭代,而在C中,數組和矩陣的編號爲0 ... r-1 –