0

に問題がありfscanfます。私はCをfscanf初めて使用しますが、.txtファイルから正しい情報を読み込めないようです。

int main() {

    //Vars
    FILE *tempFileIn;
    int rowIndex = 0;
    int objectIdNum;
    double magnitudePhotographed;
    double distance;
    int velocity;
    double magnitudeCorrected;
    double magnitudeTotal;

    //Read File Data
    tempFileIn = fopen("hubbleData.txt","r");
    if (tempFileIn == NULL) {
        printf("File read error.");
    }

    printHeaders();
    while(!feof(tempFileIn)) {
        fscanf(tempFileIn, "%lf %lf %lf %lf %lf", &objectIdNum, &distance, &velocity, &magnitudeCorrected, &magnitudeTotal);
        printf( "%2.3f      %2.3f", velocity, distance);
        printf("\n");
        rowIndex++;
    }

    return 0;
}  

速度は期待どおりに印刷されますが、距離は常に0.0000として印刷されます。2つの印刷順序を切り替えると、距離が正しく印刷され、速度が0.0000として印刷されます。私は2番目と3番目の列だけを気にしていますが、プロジェクトのガイドラインに従ってそれらすべてをスキャンする必要があります。

Input format:
1      0.032    +170      1.5      -16.0
2      0.034    +290      0.5       17.2
6822   0.214    -130      9.0       12.7
598    0.263    -70       7.0       15.1
221    0.275    -185      8.8       13.4
224    0.275    -220      5.0       17.2
5457   0.45     +200      9.9       13.3

Actual Output:                
170.000      0.000
290.000      0.000
-130.000      0.000
-70.000      0.000
-185.000      0.000
-220.000      0.000
 200.000      0.000

Expected Output:
170.000      0.032
290.000      0.034
-130.000      0.214
-70.000      0.263
-185.000      0.275
-220.000      0.275
 200.000      0.45
4

4 に答える 4

2

velocity宣言されていますが、および呼び出しでのintように使用されます。あなたもおそらくそれを宣言するつもりでした。doublefscanf()printf()double

于 2013-03-22T04:37:17.750 に答える
1

編集:ユーザーが速度と距離のタイプを投稿する前に、このコメントを投稿しました。速度と距離は、整数ではなく、互換性のないタイプのフロートであると想定しました。

これを試して:

printf( "%2.3f      %2.3f", (float)velocity, (float)distance);

私の推測では、floatと同じサイズではない変数をprintfに渡しているため、距離の代わりに「速度」の2番目の部分が出力されます。Printfはスタックを使用して変数を渡しますが、変数の数とサイズは関数によって定義されていないため、サイズの不一致があるとこのような問題が発生します。

于 2013-03-22T04:21:32.343 に答える
0

3つの変更が必要です

1)として宣言velocitydoubleます。

2)でfscanf、ではないobjectIdNumとして読む必要があります。%d%lf

最後flose(tempFileIn);に、mainから戻る(プログラムを終了する)前に使用します。

注:実際には数値であり、値ではないvelocityためだと思います。doublevelocityrealintegral

于 2013-03-22T04:45:51.273 に答える
0

と宣言するobjectIdNumvelocity、正しく機能します。doublefscanfprintf

velocity変数をとして宣言しint、で間違った形式指定子を使用していfscanfますprintf

于 2013-03-22T04:40:13.757 に答える