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.
İ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ı (http://www.cplusplus.com/reference/clocale/setlocale/) ve burayı (https://msdn.microsoft.com/en-us/library/x99tb11d.aspx) okumalısın.
Kolay gelsin.
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.