2013-03-24 77 views
-4

我试图数据的文本文件(如下所示),但我不断收到错误参数太少错误在阅读文件中

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; 
} 

以上是与变化更新的代码,prinitng出来时,我得到下面的输出

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

回答

4

您有六个格式说明(%f),但只给它两个地方把它们。制作更多变数。此外,你可能只需要最后一个字段的花车;其余的应该是整数。


有了更新的代码,你的输出是不相同的输入的原因是所有的\n S的。每个\n添加一条新线,最后只需要一条线。删除所有,但最后一个。

+0

我很抱歉,但从两个地方,你的意思是argv [1]? – Jordan 2013-03-24 05:33:50

+1

我想我明白了,你的意思是数据变量? – Jordan 2013-03-24 05:35:33

+0

@Jordan是的,每个格式说明符(例如你写的'%f')都需要一个输入参数(比如'&date')。你的编译器正在检查它并警告你参数的数量是否与格式说明符的数量不匹配。 – nemo 2013-03-24 05:37:06

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; 
}