J'écris un programme qui vous découchera avec la conversion de valeurs binaires en hexagonales et inversement. p>
L'utilisateur doit entrer une valeur qui sera stockée dans une variable int. Je dois déterminer si cette entrée utilisateur est un numéro binaire huit bits comme 10010010, 11110000, 10101010, etc. P>
J'ai déjà écrit une fonction pour déterminer le nombre de caractères que l'utilisateur entre dans l'utilisateur, mais je ne trouve pas beaucoup sur la manière de vous assurer que l'entrée de l'utilisateur est un 1 ou un 0. P>
Est-ce juste une solution simple que je ne vois pas? p>
3 Réponses :
Utiliser comme ceci:
Si votre programme pour stocker l'entrée de l'utilisateur dans un tableau de caractères (chaîne), vous pouvez utiliser la fonction STRSPN CODE> qui recherche la première occurrence d'un caractère non correspondant à une chaîne donnée.
#include <stdio.h>
#include <string.h>
int main () {
const char user_input[] = "101th";
const char bdigits[] = "01";
int i = strspn (user_input, bdigits);
printf("Not a binary digit at position %d.\n",i);
return 0;
}
Plutôt que de prendre une entrée de caractères, puis de la tentative de convertir la chaîne résultante en une valeur numérique que vous pouvez manipuler, il suffit de demander à l'utilisateur de saisir une valeur numérique à 8 bits. Qu'il soit entré en décimal, hexadécimal ou octal, la valeur résultante est toujours stockée en mémoire en tant que valeur binaire.
Étant donné que vous souhaitez limiter l'entrée à une valeur de 8 bits, C99 introduit des types de variables exacts qui éliminent toute ambiguïté Taille de type entre les architectures. Comprendre que Les types exacts-largeur sont définis dans En nécessitant une valeur 8 bits, il est utile de saisir une variable temporaire de type plus grand (par exemple Valeur 64 bits), puis testez si la valeur entrée est comprise entre une valeur de 8 bits. Une vérification conditionnelle simple que le Après avoir lu l'entrée de l'utilisateur et la validation de la conversion et que la valeur est comprise entre 8. -bit, vous pouvez émettre la valeur dans n'importe quelle base que vous aimez à l'aide des macros fournies dans Si l'utilisateur tente de saisir quelque chose en dehors de la plage de valeur 8 bits: P> Char code> et
non signé Char code> sont définis comme 1 octet / 8-bits sur pratiquement tous les systèmes, où des types tels que
long code> peuvent être 4 -bytes sur certains systèmes (par exemple x86) et 8 octets sur d'autres (par exemple, x86_64). L'utilisation des types exacts-largeur supprime toute l'ambiguïté. P>
stdint.h code> et les macros à utiliser avec
printf code> ou
scanf code> est défini dans
inttypes.h code> (Remarque:
intttypes.h code> est requis pour inclure
stdint.h code>, Donc, si vous utilisez les macros,
inttypes.h code> est tout ce qui est nécessaire) Voir: homme intttypes.h p>
non signé code> est
0-255 code> ou un
signé la valeur code> est
-128 à 127 code> est suffisant. Si la valeur entrée n'est pas avec ces gammes pour des types non signés / signés, il n'est pas une valeur de 8 bits. P>
inttypes.h code> pour des types non signés et hexadécimaux, ainsi qu'une fonction simple pour produire une représentation binaire rembourrée. P> Mettre tout cela possible, vous pouvez faire quelque chose comme ce qui suit: p>
$ ./bin/8bitentry_string
enter an 8-bit binary no.: 10131
warning: conversion ended at invalid char '3'
unsigned: 5
hex : 5
Pourquoi ne pas nécessiter que l'utilisateur n'entrera qu'une valeur de 8 bits à l'aide du type
non signé Char code> ou
uint8_t code>? Sinon, vérifiez simplement si la valeur est
-128 à 127 Code> (pour la valeur signée 8 bits) ou
0-255 code> (pour non signé) Si vous prenez une entrée de caractères de < code> '0's's code> et
's's's's's's's's's code>, alors vérifiez simplement que le caractère saisi est
' 0 ' code> ou
' 1 ' code> (note , chaque personnage sera 8 bits)
La solution simple que je ne vois pas est ... Si vous prenez l'entrée en tant qu'entrée en tant que
sans signé Char code> (ou
int code>) et que l'utilisateur entre (dire
9 Code>), la valeur en mémoire sera déjà
00001001 code>. Un ordinateur connaît uniquement
0 code> ou
1 code>. Donc, peu importe la manière dont vous prenez la valeur numérique comme entrée, il sera stocké en tant que valeur binaire en mémoire et vous êtes libre de manipuler les bits dans la représentation de base que vous aimez.
Je vois ce que tu dis, merci!