使用<使用csv文件重定向

时间:2014-09-01 04:11:04

标签: c

对于工程类我试图在C中编写一些代码,根据每行输入文本文件的三个输入值来计算拖动,这些输入值将在终端使用<重定向。该程序应该打印为每行输入的3个值,然后打印第4列中的计算结果......此时我的代码只打印并计算最后一行。我知道这是一个简单的问题,只是想知道我做错了什么:

int
main(int argc, char *argv[])
{

    double cd, mass, velocity_terminal, area;
    printf("Stage 1\n");
    printf("=======\n");

    printf("mass\tvelocity\tarea\tdrag coefficient\n");


    while(scanf("%lf,%lf,%lf", &mass, &velocity_terminal, &area) == 3);
    {

        printf("%.1lf\t %.1lf\t %.3lf\t", mass, velocity_terminal, area);

        cd = (2 * mass * GRAVITY)/(DENSITY * area * velocity_terminal * velocity_terminal);
        printf("%.3lf\n", cd);
    }

例如,如果我输入:

43,56,22
66,88,143
12,54,65
23,67,87

作为文本文件,它只会做最后一行吗?

任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:4)

您的while循环不正确。

while(scanf("%lf,%lf,%lf", &mass, &velocity_terminal, &area) == 3);

删除分号。它在没有主体的情况下结束循环,然后独立于循环评估下一个块。

while(scanf("%lf,%lf,%lf", &mass, &velocity_terminal, &area) == 3)
{
    printf("%.1lf\t %.1lf\t %.3lf\t", mass, velocity_terminal, area);
    cd = (2 * mass * GRAVITY)/(DENSITY * area * velocity_terminal * velocity_terminal);
    printf("%.3lf\n", cd);
}

答案 1 :(得分:2)

在循环结束时删除;

它与您的代码不同。

  1. while(scanf("%lf,%lf,%lf", &mass, &velocity_terminal, &area) == 3);将继续阅读该文件,直至EOF。
  2. {...}以下阻止声明仍然有效。
  3. 编译器不会告诉你这是错的,因为从它的角度来看,它的语法是正确的。 :)