Error printing accented character in C!

Asked

Viewed 43 times

0

# include <stdio.h>
# include <stdlib.h>
# include <locale.h>
int main()
{
setlocale(LC_ALL,"portuguese_Brazil");
int Quantidade_De_Clientes, i;
float Saldo_Total, Media_Total;    
printf("Qual a quantidade de clientes do banco ? ");
scanf("%d",&Quantidade_De_Clientes);
while (Quantidade_De_Clientes <= 0 || Quantidade_De_Clientes > 10)
{
    printf("\nQuantidade de clientes invalido\nDigite novamente a quantidade de clientes ? ");
    scanf("%d",&Quantidade_De_Clientes);
}
int Numero_Da_Conta[Quantidade_De_Clientes];
float Saldo_Do_Cliente[Quantidade_De_Clientes];
for (i = 0; i < Quantidade_De_Clientes; i++)
{ 
    printf("\nQual o numero da conta do cliente ? ");
    scanf("%d",&Numero_Da_Conta[i]);
    printf("\nQual o saldo da conta do cliente ? "); 
    scanf("%f",&Saldo_Do_Cliente[i]);
    Saldo_Total += Saldo_Do_Cliente[i];
}   
Media_Total = Saldo_Total / Quantidade_De_Clientes;
for ( i = 0; i < Quantidade_De_Clientes; i++)
{
    if (Saldo_Do_Cliente[i] > Media_Total)
    {
        printf("\n\nO cliente com a conta do banco de numero %d com saldo igual a %5.2f esta acima da media do saldo dos clientes do banco que é %f ",Numero_Da_Conta[i],Saldo_Do_Cliente[i],Media_Total);
    }
    else if (Saldo_Do_Cliente[i] < Media_Total)
    {
        printf("\n\nO cliente com a conta do banco de numero %d com saldo igual a %5.2f esta abaixo da media do saldo dos clientes do banco que é %f ",Numero_Da_Conta[i],Saldo_Do_Cliente[i],Media_Total);
    }
    else if (Saldo_Do_Cliente[i] == Media_Total)
    {
        printf("\n\nO cliente com a conta do banco de numero %d com saldo igual a %5.2f esta com o saldo igual a media do saldo dos clientes do banco que é %f ",Numero_Da_Conta[i],Saldo_Do_Cliente[i],Media_Total);
    }
}

return 0;
}  

I’m having trouble printing accented characters on the screen, I researched and in the researches teach how to do it this way, however, the characters continue to come out badly formatted (other characters) in the print. in'''setlocale'' I have tried several other parameters, but no other works.

  • 1

    Include the operating system in the question because it makes a difference when answering. If it is Linux or macOS, you should check your system’s current locale (on my Linux, 'echo $LANG' shows 'C.UTF-8') and check if your source is using the same encoding (on Linux the 'file' command. c' says if the source is UTF-8 or ISO 8859-1, the encoding must match the system)

  • my operating system is Windows! how to proceed ?

1 answer

0

An alternative (for future views of this issue) is to use the ASCII table if only the correct output is required and it does not depend on input. ASCII table

The following code exemplifies output of accented Portuguese characters

#include <stdio.h>

int main() {
int i;
char c[11];
c[0]=133; /* à */
c[1]=160; /* á */
c[2]=198; /* ã */
c[3]=131; /* â */
c[4]=130; /* é */
c[5]=136; /* ê */
c[6]=161; /* í */
c[7]=147; /* ô */
c[8]=162; /* ó */
c[9]=228; /* õ */
c[10]=163; /* ú */
for(i=0;i<=10;i++){
    printf("%c",c[i]);
}
return 0;
}                               

If the above code does not work, it may be that your system console/terminal does not use ASCII encoding.

Using the ANSI table

#include <stdio.h>

int main() {
int i;
char c[11];
c[0]=224; /* à */
c[1]=225; /* á */
c[2]=227; /* ã */
c[3]=226; /* â */
c[4]=233; /* é */
c[5]=234; /* ê */
c[6]=237; /* í */
c[7]=244; /* ô */
c[8]=243; /* ó */
c[9]=245; /* õ */
c[10]=250; /* ú */
for(i=0;i<=10;i++){
    printf("%c",c[i]);
}
return 0;
} 

Browser other questions tagged

You are not signed in. Login or sign up in order to post.