2013-03-24 38 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; 
}