Gönderen Konu: C de veri girişinde ve gösterilişinde nokta yerine virgül  (Okunma sayısı 259 defa)

Çevrimdışı ahmetbudak

  • Kıdemli
  • ****
  • İleti: 387
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.
« Son Düzenleme: 02 Aralık 2017, 14:58:05 Gönderen: ahmetbudak »

Çevrimdışı vitruvius

  • Emektar
  • *****
  • İleti: 842
Ynt: C de veri girişinde ve gösterilişinde nokta yerine virgül
« Yanıtla #1 : 02 Aralık 2017, 16:00:21 »
İstediğini yapmanın kolay bir yolu var, ancak gerekli "local" dosyalarının sisteminde yüklü olması lazım.

Kod: [Seç]
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.

Kod: [Seç]
#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;

Kod: [Seç]
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.

Kod: [Seç]
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.
« Son Düzenleme: 02 Aralık 2017, 16:02:54 Gönderen: vitruvius »

Çevrimdışı controller

  • Kıdemli
  • ****
  • İleti: 319
Ynt: C de veri girişinde ve gösterilişinde nokta yerine virgül
« Yanıtla #2 : 03 Aralık 2017, 03:50:39 »
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.