Другие языки программирования и технологии

как считать из файла число с плавающей запятой в Си? точку нормально воспринимает, а запятую нет.

Два варианта (чисто примеры - без проверок на ошибки и т. д.) :

Православный:
подключить locale.h и вызвать setlocale с установкой русского языка (т. к. у нас принят разделитель, а не .)
(в разных версиях компиляторов у setlocale могут быть разные параметры, этот работает в Visual C++ по крайней мере)

#include <locale.h>
#include <stdio.h>

int main() {
float fValue;
setlocale(LC_ALL, "RUSSIAN");
FILE *f = fopen("d:\\test.txt", "rt");
fscanf(f, "%f", &fValue);
printf("%f", fValue);
fclose(f);
return 0;
}

Иной =):
считать как строку, заменить "," на "." преобразовать строку в число

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
char buf[255];
float fValue;
FILE *f = fopen("d:\\test.txt", "rt");
//Читаем строку в buf
fscanf(f, "%s", &buf);
//Ищем запятую
char *pFind = strchr(buf, ',');
//Если нашли - меняем на точку
if (pFind) *pFind = '.';
//Преобразуем строку в число
fValue = atof(buf);
printf("%f", fValue);
fclose(f);
return 0;
}
Anton Mamrukov
Anton Mamrukov
84 764
Лучший ответ
Прогоните файл через tr и скормите вашей программке:

$ cat fl.txt
3,14
1,73

$ cat fl.txt | tr "," "."
3.14
1.73
Юрий
Юрий
81 448
Если неудобно каждый раз редактировать исходный файл, можно это сделать бинарным считыванием, с помощью fread
Считываете весь файл в символьный массив, там пробегаете и делаете замену запятых на точку, ну и, устанавливая затем указатель к каждому значению, преобразовываете значения с помощью atof в числа с плавающей точкой