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。如果我切换两者的打印顺序,距离将正确打印,速度将打印为 0.0000。我只关心第二列和第三列,但必须按照项目指南扫描所有列。

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被声明intdouble在你的fscanf()printf()调用中像 a 一样使用。您可能也打算将其声明为double

于 2013-03-22T04:37:17.750 回答
1

编辑:我在用户发布速度和距离类型之前发布了此评论。我假设速度和距离是不兼容的浮点类型,而不是整数。

尝试这个:

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

我的猜测是您将变量传递给 printf 的大小与浮点数不同,因此打印“速度”的第二部分而不是距离。printf 使用栈来传递变量,变量的个数和大小不是由函数定义的,所以任何大小不匹配都会导致这样的问题。

于 2013-03-22T04:21:32.343 回答
0

声明objectIdNumand velocityasdouble这样fscanf并且printf将正常工作。

您将变量声明velocity为并且在 in和 in 中int使用了错误的格式说明符fscanfprintf

于 2013-03-22T04:40:13.757 回答
0

你需要 3 处改变

1) 声明velocitydouble

2) in fscanf,objectIdNum应读作%dnot %lf

finallyflose(tempFileIn);在从 main 返回之前使用(退出程序)。

注意:我假设velocity因为double实际上velocity是一个real数字而不是一个integral值。

于 2013-03-22T04:45:51.273 回答