如何检查输入二进制数的正确性,是否包含c中的0和1不同的数字?

问题描述 投票:1回答:2

我编写了一个函数,提示用户输入0-s和1-s的二进制数字序列,然后输出以下内容。

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;
}

我编写了一个函数,提示用户输入0-s和1-s的二进制数字序列,并输出以下内容。 A)二进制数的十进制表示形式B)二进制数的十六进制表示形式...

c binary bitwise-operators
2个回答
0
投票

您可以使用库函数strspn来检查字符串只有二进制数字,如下面的示例所示:


0
投票

您正在检查太多字符:

© www.soinside.com 2019 - 2024. All rights reserved.