Strona 2 z 2

: 12 kwietnia 2007, 20:42
autor: mlyczek
No to jednym z wyjść (jedynym jakie teraz mi przychodzi do głowy i jakie znalazłem jak dotąd na google) jest takie, że przed wypisaniem tej liczby zmiennoprzecinkowej konwertujesz ją do łańcucha znaków (ja bym dał w c++ string, ale w c go niestety nie ma) i w tym łańcuchu znaków zmieniasz kropkę na przecinek (z tym już nie będzie problemu) i dopiero ten łańcuch wypisujesz do pliku.

Rozwiąznie trochę toporne, ale jak narazie jedyne, które udało mi się wymyślić i wyszperać.

: 12 kwietnia 2007, 20:48
autor: slomek
No właśnie też tylko to mi przychodzi do głowy...
Problemy są trzy:
1. Zapisuję naraz TRZYNA¦CIE liczb zmiennoprzecinkowych- konwertowanie każdego mija się z celem
2. Program służy do rozpoznawania pieszych na sekwencjach filmu i chciałbym, żeby w miarę szybko działał (każda konwersja zabierze pare cykli procka:P)
3. To jest praca dyplomowa- wszelkie prowizorki niewskazane ;)

: 12 kwietnia 2007, 21:49
autor: mlyczek
Z tego co jeszcze szukałem to możesz pokombinować z locale. Tylko nie mam aktualnie dokumentacji gcc, więc musiałbyś poszukać w niej jak ustawić określone locale i później zgodnie z nim wypisywać. Bo przecinek jest używany w Polsce, a Anglosasi używają do tego celu kropki, więc zmiana locale na pl powinna pomóc, ale tak jak mówię, są to tylko moje przypszczenia, bo nie robiłem tego nigdy, a w dokumentacji nie moge sprawdzić.

: 12 kwietnia 2007, 21:57
autor: ajur
jest coś takiego jak biblioteka locale, w której to można zmieniać ustawienia takie jak wyświetlanie daty, waluty czy właśnie znaku znaku między częścią całkowitą a ułamkową w liczbach rzeczywistych. Plik nagłówkowy to locale.h, nie powiem ci jak i co tam zmienić, bo sam nie wiem:P, ale np. tu:
http://www.chemie.fu-berlin.de/chemnet/ ... bc_19.html
możesz o tym poczytać. aha, proponuję najpierw napisać sobie mały programik, sprawdzający twoje aktualne ustawienia locale. Może w systemie masz jakieś śmieszne ustawienia czegoś, albo w kompilatorze?

: 12 kwietnia 2007, 22:00
autor: mlyczek
ajur pisze:Może w systemie masz jakieś śmieszne ustawienia czegoś, albo w kompilatorze?
Raczej nie ma nic śmiesznego, bo to jest naturalne, że c chce mieć float z kropką, a nie z przecinkiem. Tutaj będzie kwestia (wg mnie) zmiany locale na np. amerykańskie w programie i później wypisanie/wczytanie tej liczby. Pytanie tylko czy taka operacja jest dozwolona.

: 12 kwietnia 2007, 22:27
autor: slomek
Dostałem odpowiedź na LQ. Rozwiązaniem może być np ustawienie:

Kod: Zaznacz cały

export LC_LOCALE=C
Sprawdziłem i działa. Dopisałem to do /etc/bash.bashrc.
Możliwe, że coś zamieszałem przy lokalizacji systemu.
THX! :-)

: 26 kwietnia 2007, 00:09
autor: Witek Baryluk
a może tak lokale sobie zmienić w programie setlocale, albo w shell export LC_ALL=C
pozdrawiam.