Я написал функцию, которая предлагает пользователю ввести двоичную числовую последовательность из 0 и 1 и выводит следующее.
A) Десятичное представление двоичного числа
B) Шестнадцатеричное представление двоичного числа (основание 16)
Если ввод недопустим (то есть, если bin_num содержит цифры, отличные от 0 и 1), пользователь должен получить сообщение об ошибке (подробно описано ниже).
Пример запуска программы:
Please enter binary number input: 112011
invalid input, please try again.
Please enter binary number input: 110011
110011 to decimal is: 51
110011 to hexadecimal is: 0x33
Чтобы правильно решить проблему, я не смогу читать двоичные числа как целые, так как это может вызвать переполнение. С другой стороны, ответ (в десятичном формате) всегда будет соответствовать стандартному целочисленному размеру.
Мой вопрос: как проверить правильность, если двоичное число (вводимое пользователем) содержит цифры, отличные от 0 и 1?
Я что-то пробовал, но ничего не вышло.
Это мой код:
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable:4996)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define ENTERING_QUESTION "Please choose a question by entering 1-5 (enter 0 to exit):"
#define MAX_SIZE_INPUT 31
#define QUESTION1_INPUT_MESSAGE "Please enter binary number input:"
#define QUESTION1_OUTPUT_MESSAGE_DECIMAL "to decimal is:"
#define QUESTION1_OUTPUT_MESSAGE_HEXADECIMAL "to hexadecimal is:"
#define QUESTION1_ERROR_MESSAGE "invalid input, please try again."
void bin2hexanddec(char *bin_str)
{
for (int i = 0; i < MAX_SIZE_INPUT; i++) {
if (bin_str[i] != '0' && bin_str[i] != '1') {
printf(QUESTION1_ERROR_MESSAGE"\n");
return;
}
}
char *ptr;
long long input_num= strtol(bin_str, &ptr, 10);
int dec = 0, i = 0, rem;
while (input_num != 0) {
rem = input_num % 10;
input_num /= 10;
dec += rem * pow(2, i);
++i;
}
printf("%lld " QUESTION1_OUTPUT_MESSAGE_DECIMAL " %d\n", input_num, dec);
printf("%lld " QUESTION1_OUTPUT_MESSAGE_DECIMAL " %X\n", input_num, dec);
return;
}
.
.
.
int main()
{
char bin_str[MAX_SIZE_INPUT
.
.
.
printf(ENTERING_QUESTION"\n");
scanf("%d", &choice);
if (choice == 1) {
printf(QUESTION1_INPUT_MESSAGE"\n");
scanf("%s", bin_str);
bin2hexanddec(bin_str);
}
.
.
.
return 0;
}