好的,所以我對這個網站的編程和發佈都很陌生,我的問題有點複雜,但我會試圖闡明我的情況。我試圖編寫一個代碼來讀取一個未知大小的文件(極座標列表),將這些值存儲在一個數組中,然後執行一次轉換並轉換出一個包含轉換數據的新數組(技術上我正在使用這個新的數組在預先設計的函數中用C++繪製數據圖表,但這並不重要,因爲它是賦值的一部分,當然不是錯誤的根源)。在陣列上執行操作
我有兩個主要問題,其中第一個是可變數組大小。在下面的代碼中,你可以看到我的x和y數組沒有約束,所以即使r [40]之後r []中沒有任何內容,循環繼續將值轉換爲x [999]。我可以限制我的r和theta數組的大小,因爲我可以在fscanf函數到達文件末尾時停止讀取值,但我不知道我的x和y數組的類比。 (另外,如果有人能夠解釋爲什麼我的角色數組沒有這個問題,即使它被定義爲多達128個字符,我也會非常感激)轉換不完全匹配。所以當我打印轉換後的值時,函數會正確轉換它們,但將從r [i]和theta [i]轉換的值存儲到x [i + 1]和y [i + 1]。我真的不知道是什麼導致了這個問題。
我當然希望我的問題有道理。任何幫助,將不勝感激!如果有什麼不清楚的地方,請讓我知道,我會盡力解釋。謝謝!
#include <stdio.h>
#include <math.h>
#define ARRAYSIZE 1000
#define FILENAMESIZE 128
float convertx(float r[], float theta[], int numPoints);
float converty(float r[], float theta[], int numPoints);
int cmain() {
int i;
float r[ARRAYSIZE], theta[ARRAYSIZE], x[ARRAYSIZE], y[ARRAYSIZE];
char filename[FILENAMESIZE];
FILE *InputFile;
printf("Type the data file name: ");
scanf("%s", filename);
InputFile = fopen(filename,"r");
if(InputFile == NULL){
printf("Error, could not open file: %s.\n",filename);
return 1;
}
for(i=0; i < ARRAYSIZE; i++){
if(fscanf(InputFile,"%f %f", &r[i], &theta[i]) == EOF) break;
printf("Value %d is %f\n",i+1,r[i]);
}
fclose(InputFile);
for(i=0; i < ARRAYSIZE; i++){
x[i] = convertx(r,theta,i);
printf("Value %d is %f\n",i+1,x[i]);
}
for(i=0; i < ARRAYSIZE; i++){
y[i] = converty(r,theta,i);
}
return 0;
}
float convertx(float r[], float theta[], int numPoints){
int i;
float x;
for(i=0; i < numPoints; i++)
x = r[i]*cos(theta[i]);
return x;
}
float converty(float r[], float theta[], int numPoints){
int i;
float y;
for(i=0; i < numPoints; i++)
y = r[i]*sin(theta[i]);
return y;
}
編輯:請求是輸入文件的片段。以下是前幾站(有文件中沒有逗號,只是空白不幸的是,這個網站我格式化的技能太可怕了):
60,3.9269875
60,0.7853975
0, 0
1,0.25
2,0.5
你可以給你正在閱讀的輸入文件的片段? – tokamak
在你的convertx和converty函數中,你爲什麼要有for循環?只返回計算的x或y的最後一個值,因此您正在計算從i = 0到i =(numPoints-2)的數據正在被丟棄。 – tokamak