Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bem pessoal, eu estou querendo adicionar pontos em um valor inteiro, para explicar melhor vamos ao código:
char text[30];
int value = 10000000000;
sprintf(text, "O valor ganho foi de: %d", value);
cis->print_message(text);
Eu queria saber uma forma de retornar o valor com pontos, ficando da seguinte forma: **10.000.000.000**
Alguém tem alguma ideia ?/profile/35824-_isis_/?do=hovercard" data-mentionid="35824" href="/profile/35824-_isis_/" rel="">@_Isis_ eu tentei porém em windows não retorna o valor, exemplo:
char text[30];
int value = 10000000000;
setlocale(LC_ALL,"");
sprintf(text, "O valor ganho foi de: %'d", value);
cis->print_message(text);
quando eu uso o **%'d** ele printa **'d** em vez do valor do valueLC_NUMERIC = pt_BR
/profile/35824-_isis_/?do=hovercard" data-mentionid="35824" href="/profile/35824-_isis_/" rel="">@_Isis_ então em gcc eu consegui, porém no visual em vez de retornar o valor, me retorna 'd
Olha o código aplicado para teste:
http://coliru.stacked-crooked.com/view?id=057afac5ccca6598
Em windows ele me retorna assim.
O valor ganho foi de: 'd
Muito provável porque a implementação não suporta o formatador.
/profile/35824-_isis_/?do=hovercard" data-mentionid="35824" href="/profile/35824-_isis_/" rel="">@_Isis_ E há algo que possa ser feito no windows ?
Você pode criar uma rotina que insere os pontos entre as casas decimais na hora de mostrar na tela.
void imprimecompontos(char* texto){
int tamanho=strlen(texto),i,modulo;
modulo=(tamanho%3);
if(!modulo)
modulo+=3;
for(i=0;i<tamanho;i++){
if((i==modulo)&&(i)){
printf("%c",'.');
modulo+=3;
}
printf("%c",texto[i]);
}
}
int main (){
char texto[20];
int valor=10000000;
sprintf(texto,"%d",valor);
imprimecompontos(texto);
system("pause");
}
Acredito que usar locale.h é mais fácil.
http://en.cppreference.com/w/c/locale/setlocale
https://msdn.microsoft.com/en-us/library/ftyz68a0.aspx