scanf("%u",&v);// unsigned intprintf("%u", v);scanf("%hd",&v);// short intprintf("%hd", v);scanf("%hu",&v);// unsigned short intprintf("%hu", v);scanf("%ld",&v);// long intprintf("%ld", v);scanf("%lu",&v);// unsigned long intprintf("%lu", v);
Reais
floatdoublelongdouble
Intervalos de valores
O long double não aparece porque os intervalos variam bastante de máquina para máquina.
⚠️ Tal como no scanf, o getchar não salta espaços em branco quando lê um char.
putchar
A função putchar escreve um caracter na consola.
putchar('C');
E se quisermos ler vários chars?
Usamos um ciclo.
// lê chars até encontrar \nchar l;do{ scanf("%c",&l);}while(l !='\n');
char l;while((l = getchar())!='\n');
Conversão de tipos
No C, é possível converter de uns tipos para outros.
Na verdade, nós já usámos esta funcionalidade sem saber, porque existem conversões que são automáticas e implícitas.
Outras têm de ser explicitamente declaradas.
Conversões implícitas
Quando realizamos operações binárias, o C consegue detectar se os 2 operandos são do mesmo tipo.
Se não forem, um dos tipos é convertido no outro, porque as operações são feitas com operandos do mesmo tipo.
O resultado da operação será do tipo “superior”.
int i;float f, p;p = f + i;
Neste caso, o valor de i é convertido para float.
Se o contrário ocorresse, perdiamos por completo a componente decimal de f.
Operandos da mesma “classe”
reais inteiroslong double unsigned long int ^ ^ | | double long int ^ ^ | | float unsigned int ^ | int
Exemplos de conversões implicitas
char c;shortint s;int i;unsignedint u;longint l;i = i + c;// c convertido para inti = i + s;// s convertido para intu = u + i;// i convertido para unsigned intl = l + u;// u convertido para long int
Mais exemplos de conversões implicitas
longint l;unsignedlongint ul;float f;double d;longdouble ld;ul = ul + l;// l convertido para unsigned long intf = f + ul;// ul convertido para floatd = d + f;// f convertido para doubleld = ld + d // d convertido para long double
Conversões implicitas na atribuição
char c;int i;float f;double d;i = c;// c convertido para intf = i;// i convertido para floatd = f;// f convertido para doublei =3.14;// 3.14 convertido para 3c =10000;// overflowf =1.0e100;// excede limite
Casting
Para fazer uma conversão explicita, escrevemos o nome do tipo final entre parêntises, seguido do valor que queremos converter.
float f =3/2;// 1.0 -> divisão de inteiros dá inteirof =(float)3/2;// 1.5 -> converter 3 para float e dividir por 2
O operador de casting é uma operação unária.
Operações unárias têm precedência sobre operações binárias, logo…
(float) 3 / 2 equivale a ( (float) 3 ) / 2
Quando realizamos algumas operações aritméticas, pode ser necessário fazer uma conversão explicita.