我编写了一个函数,提示用户输入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)二进制数的十六进制表示形式...
您可以使用库函数strspn
来检查字符串只有二进制数字,如下面的示例所示:
您正在检查太多字符: