Le type char en C est une variable 8 bits
8 bits peut évoluer de -128 à +127 avec le codage complément à 2
#include <stdio.h>
#include <stdlib.h>
int main()
{
char caract;
caract= 0x41;
printf ("%c\n",caract);
return EXIT_SUCCESS;
}
printf avec le format %c dédié au caractères ascii (voir man ascii)
Nous affiche ici le caractère 'A' (0x41)
caract= 0x41; /* cette ligne peut être remplacée aussi par */
caract= 'A'; /* pas besoins de connaitre les codes ASCII */
Le type unsigned char
va évoluer de 0 à 255 ce qui donne bien 256 combinaisons , 2^8 mais toujours codé sur 8 bits
#include <stdio.h>
#include <stdlib.h>
int main()
{
unsigned char caract;
caract= 0x41;
printf ("%c\n",caract);
return EXIT_SUCCESS;
}
on obtient la même chose avec le unsigned char
le unsigned char est toujours positif (considéré)
#include <stdio.h>
#include <stdlib.h>
int main()
{
char caract;
caract= -32;
printf ("%d\n",caract);
return EXIT_SUCCESS;
}
on obtient bien la valeur -32 qui s'affiche grâce a %d
#include <stdio.h>
#include <stdlib.h>
int main()
{
char caract;
caract= -32;
printf ("%d\n",caract);
return EXIT_SUCCESS;
}
! remarque , si vous voulez entrer une valeur qui sort du char ou unsigned char , le compilateur va vous prévenir avec un Warning et le résultat risque de vous surprendre quoi que logique !
#include <stdio.h>
#include <stdlib.h>
int main()
{
char caract;
caract= -129;
printf ("%d\n",caract);
return EXIT_SUCCESS;
}
gcc prog.c -o prog
warning: overflow in implicit constant conversion [-Woverflow]
caract= -129;
./prog
127
conclusion le warning , doit être corrigé , car il est la preuve d'un mauvais codage.
#include <stdio.h>
#include <stdlib.h>
int main()
{
unsigned char ligne[100]="Homer Simpson !";
printf ("%s\n",ligne);
return EXIT_SUCCESS;
}
ligne [100] va permettre au compilateur d'allouer un espace de 100 octets contigus , en RAM vu que c'est une variable.
Accessible de ligne[0] à ligne[99], ca fait bien 100 octets.
%s permet d'afficher une chaîne de caractère "Homer Simpson !"
A noter :
une chaîne de caractère se termine toujours par un caractère NULL ici le15 vaut 0
#include <stdio.h>
#include <stdlib.h>
int main()
{
unsigned char ecran[80][25];
ecran[0][0]=0x41;
ecran[1][1]=0x42;
printf ("%c\n",ecran[0][0]);
return EXIT_SUCCESS;
}
Exercice :
Rajouter des fonctions:
efface_ecran()
affiche_ecran()
point_ecran(int x, int y)
#include <stdio.h>
#include <stdlib.h>
#define nb_x 60
#define nb_y 20
unsigned char ecran[nb_x][nb_y];
.....
il manque du code !! c 'est un exercice
.....
void efface_ecran(void)
{
int x,y;
x=0;
y=0;
while(x<nb_x)
{
while (y<nb_y)
{
ecran[x][y]=' ';
y++;
}
x++;
y=0;
}
}
int main()
{
efface_ecran();
ecran [10][9]='1';
affiche_ecran();
return EXIT_SUCCESS;
}