変更ロケール。
いくつかの疑似コードを使用してください。
#include <locale.h>
get current locale (`*localeconv()`)
for each line
read line into buffer.
convert using `strtod()`
if it fails to convert and has a trailing character
switch(failing character)
'.' : set locale to English (`setlocale()`) and try again
',' : set locale to French and try again
restore original locale
ような何か:ロケールを使用して
char *locale_original = setlocale(LC_ALL, NULL);
char *locale_english = ...;
char *locale_french = ...;
char buf[100];
size_t i = 0;
while (i < max && fgets(buf, sizeof buf, file) != NULL) {
char *endptr;
N->biais1->l[i] = strtod(buf, &endptr);
if (endptr != buf) {
switch (*endptr) {
case '.': locale_original = setlocale(LC_ALL, locale_english); break;
case ',': locale_original = setlocale(LC_ALL, locale_english); break;
default:
handle_error();
break;
}
N->biais1->l[i] = strtod(buf, &endptr);
if (*endptr) {
handle_error();
break;
}
}
}
setlocale(LC_ALL, locale_original);
は異なる数値形式のバリエーションを処理するための標準的な方法です。残念ながら、標準機能は完全ではありません。
注これは英語対フランスの問題ではありませんが、 '「」'対小数点以下は「。」とします。 [Ref](https://en.wikipedia.org/wiki/Decimal_mark#Hindu.E2.80.93Arabic_numeral_system) – chux