Bonsoir !
dans le langage C,comment faire pour déclarer une variable de type octet?
Bonsoir !
dans le langage C,comment faire pour déclarer une variable de type octet?
Bonsoir, un octet ou byte est un "char".
Il représente bien 8bits modifiables, même s'il est souvent plus lourd en mémoire.
Bonsoir.
Un octet n'est pas un type, mais une taille (8 bits).
La norme C garantit que le type char a une taille exact d'un byte en mémoire (soit un octet dans la grande majorité des appareils), c'est donc de ce type dont tu as besoin.
Tu peux l'utiliser tel quel, ou créer un synonyme typedef unsigned char Octet;Non, un octet a une taille fixe. Peut-être tu confonds avec un pointeur sur char dont la taille varie avec l'allocation dynamique ?
quand je met char mon programme plante !,calcul de 'b' à la puissance 'n' ,n et b doivent être de type octet,puis d'afficher le résultat en représentation binaire.
voici mon programme
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 #include<stdlib.h> #include<stdio.h> int main() { //calcul de 'b' à la puissance 'n'// char x,b,n; printf("entrer votre nombre "); scanf("%c",&b); printf("saisir la puissance "); scanf("%c",&x); for(n=0;n<=x;n++) { n=b*b; } printf("le resultat est %c",b); }
Bonsoir.
Il y a plusieurs problèmes :
n est déclaré mais n'est pas initialisé. Il peut avoir comme valeur tout et n’importe quoi.
Actuellement tu mets systématiquement le carré de b dans n. Le calcul dans la boucle est n=n*b.
À la fin, tu affiches b, mais c'est n que tu dois afficher.
Attention aussi, tu utilises des char, mais ils ne font « que » un octet, tu auras des problèmes quand le résultat de l'opération dépassera son seuil maximum (ici255127). Tu devrais mettre un entier de capacité plus importante pour la variable n (comme un int).
Par ailleurs, ce forum propose un mécanisme pour afficher du code (le bouton # dans l'éditeur), je t'invite à l'utiliser pour plus de lisibilité.
Edit: Correction du seuil maximal.
255 ? Comme souvent char est signé, tu ne dépasseras même pas 127Il faudrait utiliser des unsigned char plutôt et mettre le résultat dans un type plus grand, comme unsigned int.
Un autre problème est que le formateur %c de printf() est fait pour afficher un caractère et non un nombre.
Voici un code exemple :
J'obtiens l'affichage suivant sous Windows :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 #include <math.h> #include <stdio.h> int main(void) { unsigned char number = 2; unsigned char power = 4; unsigned int result = pow(2, 4); printf("%c ^ %c = %c\n", number, power, result); printf("%d ^ %d = %d\n", number, power, result); }
☻ ^ ♦ = ► 2 ^ 4 = 16 Process returned 0 (0x0) execution time : 0.040 s Press any key to continue.
Si si, n est bien initialisé, dans la première étape de la boucle for. Pas de soucis ici.
Hum, mais que saisis-tu donc ? N'aurais-tu pas un soucis avec une mauvaise utilisation de scanf, qui doit être réservée à la lecture d'entrée Formatées ?il me laisse pas saisir la puissance,il affiche direct "votre résultat est 0"
[Spoiler]
Lorsque tu saisis "4 entrée", tu as 2 caractères dans le buffer d'entrée : 4 et '\n'. Donc tu mets 4 dans b, et '\n' dans p, comme le montre ce programme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 #include<stdio.h> #include<stdlib.h> int main(void) { unsigned char b,n=0; unsigned int p=1; printf("entrer votre nombre"); scanf("%c",&b); printf("saisir la puissance\n"); scanf("%c",&p); printf ("Surprise : p vaut [%c]\n", p); for(n=0;n<=p;n++) { p=p*b; } printf("votre resultat est %d",p); }
Partager