用C语言编程实现从键盘输入任意一个十六进制负整数,以输入的形式输出。如输入-FA98,输出-FA98.
时间: 2024-10-21 12:08:52 浏览: 38
在C语言中,处理十六进制负整数需要先转换成十进制,因为C标准库本身并不直接支持处理十六进制负数。以下是实现这个功能的一个简单示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 将十六进制字符串转换为整数
int hex_to_int(const char *hex_string) {
int len = strlen(hex_string);
long result = 0;
bool is_negative = false;
if (hex_string[0] == '-') {
is_negative = true;
len--;
}
for (int i = 0; i < len; ++i) {
if (!isxdigit(hex_string[i])) {
return -1; // 非法字符
}
unsigned char digit = tolower(hex_string[i]) - '0';
if (digit >= 10) { // 如果遇到A-F,则转为对应的数值
digit -= 10;
}
result = result * 16 + digit;
}
return is_negative ? -result : result;
}
int main() {
char input[50];
printf("请输入一个十六进制负整数(-前缀可选): ");
fgets(input, sizeof(input), stdin);
// 移除换行符
size_t len = strlen(input);
if (input[len - 1] == '\n') {
input[len - 1] = '\0';
}
int value = hex_to_int(input);
if (value != -1) {
printf("输入的十六进制数(以输入形式): %s\n", input);
} else {
printf("输入无效。\n");
}
return 0;
}
```
在这个程序中,我们首先定义了一个`hex_to_int`函数,它接受一个十六进制字符串作为输入,然后逐位将其转换为十进制整数。如果输入包含非法字符或者是一个正数,函数会返回-1。然后在`main`函数中,从用户获取输入,并调用`hex_to_int`函数将输入转换为十进制。
请注意,对于负数,我们在转换之前检查是否以 '-' 开头,并在结果上加上相应的符号。
阅读全文