gpt4 book ai didi

c - 如何添加仅允许 a-f || 之间的字母的 "(if)"A-F?

转载 作者:行者123 更新时间:2023-11-30 18:45:00 24 4
gpt4 key购买 nike

我编写了一个程序,可以将十六进制转换为十进制。我剩下的就是检查 char 是否在 a-fA-F 之间,也可能是0-9。如果不在它们之间,它将打印“非法输入”

我的代码:

int n, i;
char currentDigit;
unsigned long int sum, currentDigitInt;

printf("Enter the number of digits in the Hexadecimal number:");
scanf_s("%d", &n);
sum = 0;

printf("Enter the Hexadecimal number:\n");
for (i = n - 1; i >= 0; i--) {
scanf_s(" %c", &currentDigit);

if (currentDigit >= 'a') {
currentDigitInt = (currentDigit - 'a') + 10;
}
else if (currentDigit >= 'A') {
currentDigitInt = (currentDigit - 'A') + 10;
}
else
currentDigitInt = currentDigit - '0';
sum += currentDigitInt * pow(16, i);
}

printf("The decimal number is: %u", sum);

我需要的输出:

Enter the number of digits in the Hexadecimal number: 2Enter the Hexadecimal number: QQIllegal input

最佳答案

代码存在几个问题。

对于初学者来说,函数 scanf_s 应包含格式说明符 c 的缓冲区大小作为参数。

要输出 unsigned long 类型的对象,您必须使用格式说明符 ul

在这些 if 语句中,您不检查有效 alpha 十六进制数字的上限。

if (currentDigit >= 'a') {
currentDigitInt = (currentDigit - 'a') + 10;
}
else if (currentDigit >= 'A') {
currentDigitInt = (currentDigit - 'A') + 10;
}

要检查输入的符号是否是有效的十六进制数字,您应该编写一个单独的函数。

这是一个演示程序,展示了如何完成它。

//Microsoft (R) C/C++ Optimizing Compiler Version 19.00.23506 for x64

#include <stdio.h>
#include <string.h>
#include <ctype.h>

int hex_digit( char c )
{
const char *alpha = "ABCDEF";

unsigned char c1 = toupper( ( unsigned char )c );
const char *p;

int result = -1;

if ( '0' <= c1 && c1 <= '9' )
{
result = c1 - '0';
}
else if ( c1 != '\0' && ( p = strchr( alpha, c1 ) ) != NULL )
{
result = *p - alpha[0] + 10;
}
return result;
}

int main(void)
{
const unsigned long HEX_BASE = 16;
unsigned int n;

printf( "Enter the number of digits in the Hexadecimal number: " );
scanf_s("%u", &n);

unsigned long sum = 0;

if ( n )
{
printf( "Enter the Hexadecimal number: " );

unsigned int i = 0;
for ( ; i < n; i++ )
{
char c;

scanf_s( " %c", &c, 1 );

int digit = hex_digit( c );

if ( digit < 0 ) break;
else sum = sum * HEX_BASE + digit;
}

if ( i == n )
{
printf("The decimal number is: %ul\n", sum);
}
else
{
puts( "Illegal input" );
}
}

return 0;
}

它的输出可能如下所示

Enter the number of digits in the Hexadecimal number: 8
Enter the Hexadecimal number: ffFFffFF
The decimal number is: 4294967295l

如果您愿意,可以在程序中添加一个检查,确保输入的十六进制数字的指定数量不大于2 * sizeof( unsigned long )

关于c - 如何添加仅允许 a-f || 之间的字母的 "(if)"A-F?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55880399/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com