Chyba trafiłem na przyczynę moich problemów z nowym SDK. Na starym wszystko było normalnie (tak jak pod Windows, MacOSX i iOS). No a z nowym mam takie przeboje...
Czytam sobie plik tekstowy przy pomocy funkcji fscanf(). No i fajnie. Tylko, że w pewnym przypadku jest coś takiego, że po przeczytaniu jakiejś porcji danych w ten sposób:
FILE* file = fopen(...)
float value1, value2, value3;
fscanf(file, "%f %f %f", &value1, &value2, &value3);
następne czytanie zaczyna się znów od miejsca gdy zakończyło się ostatnie. Czyli gdybym miał taki plik tekstowy:
1.0000 2.0000 3.0000
4.0000 5.0000 6.0000
7.0000 8.0000 9.0000
To przy pierwszym czytaniu odczytam sobie wartości:
1.0000 2.0000 3.0000
przy drugim znów:
1.0000 2.0000 3.0000
przy trzecim znów:
1.0000 2.0000 3.0000
Po prostu użycie funkcji fscanf() nie powoduje przesunięcia kursora w pliku (zwanego position indicator). I faktycznie tak jest, bo jak sobie sprawdzę tak:
FILE* file = fopen(...)
float value1, value2, value3;
printf("before: %dn", ftell(file));
fscanf(file, "%f %f %f", &value1, &value2, &value3);
printf("after: %dn", ftell(file));
To w logu dostanę np. coś takiego:
before: 154
after: 154
Zauważyłem, że jak drukuję na standardowe wyjście jakąś wartość float, np.:
float test = 1.23f;
printf("test = %fn", test);
to dostaję coś takiego:
test = 1,23
Jakby ktoś nie zauważył to tu jest PRZECINEK zamiast KROPKI.
No to spróbowałem w pliku tekstowym zamienić kropki na przecinki:
1,0000 2,0000 3,0000
4,0000 5,0000 6,0000
7,0000 8,0000 9,0000
No i teraz wszystko jest tak jak powinno i jak jest na innych platformach i starym MOS SDK!
Sprawdzałem zarówno na GCC 2.95.3 jak i GCC 4.4.4 (oba z nowego SDK).
O co tu chodzi? To jakiś błąd w nowym MorphOS SDK? To jest jakoś powiązane z Localami? Bez sensu, bo ANSI C jasno opisuje, że ułamki są z kropkami. Locale chyba nie mają tu nic do tego. Poza tym ja i tak używam angielskich locali. W starym MorphOS SDK wszystko było normalnie.
Kurcze, co mogę z tym zrobić?
Ostatnia modyfikacja: 19.05.2011 22:52:14