2013-03-24 3 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 с. Каждый \n добавляет новую строку, и вы только хотите ее в конце. Удалите все, кроме последнего.

+0

Извините, но из двух пунктов вы имеете в виду argv [1]? – Jordan

+1

Я думаю, что понимаю, вы имеете в виду переменные данных? – Jordan

+0

@ Jordan Да, каждый спецификатор формата (например, '% f', который вы написали) нуждается в входном аргументе (например,' & date'). Ваш компилятор проверяет это и предупреждает вас, если количество параметров не соответствует количеству спецификаторов формата. – nemo

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