-5

我正在尝试获取文本文件的数据(如下所示),但我一直收到错误太少的参数

1/1/1990/0/0 774.359070
1/1/1990/0/10 772.973206
1/1/1990/0/20 739.628784
1/1/1990/0/30 680.130066
1/1/1990/0/40 618.887695

我的代码是

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    FILE* input;
    FILE* output;

    input = fopen(argv[1],"r");
    output = fopen(argv[2],"w");

    float date;
    float value;

    while(fscanf(input,"%f/%f/%f/%f/%f/%f\n",&date, &value)!= EOF)
    {


    }
    fprintf(output,"%f\n/%f\n/%f\n/%f\n/%f\n/%f\n",date, value);

    return 0;
}

这是我得到的错误

float_search.c: In function 'main':
float_search.c:15:2: warning: too few arguments for format
float_search.c:20:2: warning: too few arguments for format

我究竟做错了什么??

// 更新代码

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    FILE* input;
    FILE* output;

    input = fopen(argv[1],"r");
    output = fopen(argv[2],"w");

    int date1,date2,date3,date4,date5;
    float value;

    while(fscanf(input,"%d/%d/%d/%d/%d/%f\n",&date1,&date2,&date3,&date4,&date5, &value)!= EOF)
    {

        fprintf(output,"%d\n/%d\n/%d\n/%d\n/%d\n/%f\n",date1,date2,date3,date4,date5,value);
    }
    fprintf(output,"%d\n/%d\n/%d\n/%d\n/%d\n/%f\n",date1,date2,date3,date4,date5,value);

    return 0;
}

以上是带有更改的更新代码,当将其打印出来时,我得到以下输出

46804
/4196128
/32765
/-1590701960
/0
/0.000000
34501

03

4

2 回答 2

4

您有六个格式说明符 ( %f),但只给了它两个放置它们的位置。做更多的变量。此外,您可能只需要最后一个字段的浮点数;其余的应该是整数。


使用您更新的代码,您的输出与输入不同的原因是所有的\ns. 每个都\n添加一个新行,最后只需要一个。删除除最后一个以外的所有内容。

于 2013-03-24T05:31:50.480 回答
0

您已经为 6 个浮点数设置了格式,并且只为两个浮点数设置了输出参数。你可以试试这个:

int main(int argc, char *argv[])
{
    FILE* input;
    FILE* output;

    input = fopen(argv[1],"r");
    output = fopen(argv[2],"w");

    int date[5];
    float value;

    while(fscanf(input,"%d/%d/%d/%d/%d %f\n",&date[0],&date[1],&date[2],&date[3],&date[4], &value)!= EOF)
    {


    }
    fprintf(output,"%d\n/%d\n/%d\n/%d\n/%d\n/%f\n",date[0],date[1],date[2],date[3],date[4], value);

    return 0;
}
于 2013-03-24T05:40:33.337 回答