16 Kasım 2018, 06:52:48

Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H


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

Başlatan ahmetbudak, 02 Aralık 2017, 02: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.

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_NUMERICNULL);
    
    
// 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_NUMERICNULL);

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.

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.