Простой пример программы, взятый из книги Д. Гриффитс "Программирование на Си". Принимает из входного потока две мировые координаты (float) и пояснение к ним (char []) и форматирует это в выходной поток в формате json. При потоке с клавиатуры всё делает нормально. При переназначении: csv2json.exe < gps.txt > gps.json (так указано в книге) программа пишет, мало параметров и их число = 0, т.е. фактически из файла читать отказывается. Такая картина и в windows, и в Linux. Где собака порылась?
#include <stdio.h>
#include<locale.h>
int main()
{
char *locale = setlocale(LC_ALL, "");
float latitude;
float longitude;
char info[80];
int started = 0;
int result;
printf("data=[");
while (1)
{
if ((result = scanf("%f,%f,%79[^\n]", &latitude, &longitude, info)) < 3)
{
printf("Слишком мало параметров %d", result);
return 2;
}
else if(result >3)
{
printf("Слишком много параметров %d", result);
return 2;
}
printf("The number of fields input is %d\n", result);
if (started)
printf(",\n");
else
started = 1;
if ((latitude < -90.0) || (latitude > 90.0)) {
fprintf(stderr,"Неправильная широта: %f\n", latitude);
return 2;
}
if ((longitude < -180.0) || (longitude > 180.0)) {
fprintf(stderr, "Неправильная долгота: %f\n", longitude);
return 2;
}
printf ("{latitude: %f, longitude: %f, info: '%s'}\n", latitude, longitude, info);
}
printf("]\n");
return 0;
}
Файл с координатами:
42.363400,-71.098465,Speed=21
42.363327,-71.097588,Speed=23
42.363255,-71.096710,Speed=17
42.363182,-71.095833,Speed=22
42.363110,-71.094955,Speed=14
42.363037,-71.094078,Speed=16
42.362965,-71.093201,Speed=18
42.362892,-71.092323,Speed=22
42.362820,-71.091446,Speed=17
42.362747,-71.090569,Speed=23
42.362675,-71.089691,Speed=14
42.362602,-71.088814,Speed=19
42.362530,-71.087936,Speed=16
42.362457,-71.087059,Speed=16
42.362385,-71.086182,Speed=21