C de veri girişinde ve gösterilişinde nokta yerine virgül

Başlatan ahmetbudak, 01 Aralık 2017, 23:31:07

ahmetbudak

Herkese iyi geceler ...
yazılacak bir c programında scanf ile ondalıklı sayısal veri girişinde nokta yerine virgül ile giriş yapılması , aynı zamanda çıktıyı printf ile yazdırırken yine nokta yerine virgül olması istenirse ,nasıl çözüm üretilebilir? Cevaplarınız için şimdiden teşekkür ederim.

vitruvius

İstediğini yapmanın kolay bir yolu var, ancak gerekli "local" dosyalarının sisteminde yüklü olması lazım.

local -a


komutunu çalıştırıp geri dönen bilgiyi söyler misin?

Gerekli local dosyaları varsa aşağıdaki kod istediğini yapar.

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

int main()
{
    // get current LC_NUMERIC
    char * current_numeric_locale = setlocale(LC_NUMERIC, NULL);
    
    // Print current LC_NUMERIC
    if(current_numeric_locale == NULL)
    {
        printf("Error in getting current setlocale\n");
    } 
    else 
    {
        printf("Current LC_NUMERIC: %s\n", current_numeric_locale);
    }
    
    // Set new LC_NUMERIC
    char *new_numeric_locale = setlocale(LC_NUMERIC, "French_Canada.1252");
    if(new_numeric_locale == NULL)
    {
        printf("Error in setting new setlocale\n");
    } 
    else 
    {
        printf("New LC_NUMERIC: %s\n", new_numeric_locale);
    }
    printf("%f\n", 123.45);
    return 0;
}


Eğer işin bittikten sonta tekrar eski haline getirmek istiyorsan;

setlocale(LC_NUMERIC, NULL);


Eğer yabancı müşterilere iş yapıyorsan, müşterinin kullandığı makinenin ayarlarına göre ayarlayabilirsin setlocale()'i. Yani Aynı kodu Japon bir müşteri çalıştırdığında Japon formatını, Amerikalı bir müşteri çalıştırdığında Amerikan formatını görür.

setlocale(LC_NUMERIC, ".OCP");


Nümerik yerine başka kategorilerin de (zaman gibi), ya da tüm kategorilerin (LC_ALL) formatını değiştirebilirsin. Detaylar için burayı ve burayı okumalısın.

Kolay gelsin.

controller

Girilen sayıyı gets fonksiyonu ile okursun.
gets den aldığın stringde virgülleri nokta ile replace edersin.
replace ettiğin stringden değerleri sscanf ile okursun.


yazdırırken değerleri öncelikle sprintf ile bir stringe yazdırırsın.
yazdırdığın stringdeki noktaları virgül ile replace edersin.
replace ettiğin stringi puts veya printf %s ile yazdırırsın.

Hesabım OG tarafından haksız bir şekilde pasif yapılmıştır.