@qyui

Почему не читаются данные при вводе из файла?

Простой пример программы, взятый из книги Д. Гриффитс "Программирование на Си". Принимает из входного потока две мировые координаты (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
  • Вопрос задан
  • 132 просмотра
Решения вопроса 1
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Скорее всего ошибка в файлах. Они наывазются не так, как вы передаете в параметрах, или находятся в другой директории, или пусты. А правильный текст вы видите в другом файле. Перепроверьте еще раз все названия. Или там первая строчка пустая.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы