编写函数int conv(char hex[])将16进制的数字字符串转换为十进制整数,要求主函数中输入16进制数字字符串,调用conv函数输出其十进制整数。16进制数字字符串的位数要求在6位以下,1位以上,并以H或h结尾。 请只提供子函数的编写。#include <stdio.h> #include <stdlib.h> int conv(char hex[]); int main() { int m; char hex[7]; scanf("%s",hex); m=conv(hex); if(m==-1) printf("输入有误!"); else printf("%d\n",m); }
时间: 2024-03-17 14:46:39 浏览: 212
好的,在这里给出修改后的conv函数的实现,以满足要求:
```c
#include <stdio.h>
#include <string.h>
#include <math.h>
int conv(char hex[]) {
int len = strlen(hex);
if (len < 2 || len > 7 || (hex[len-1] != 'H' && hex[len-1] != 'h')) {
// 位数不符合要求或者不以H或h结尾,返回-1表示输入有误
return -1;
}
int decimal = 0;
int base = 1;
for (int i = len - 2; i >= 0; i--) {
if (hex[i] >= '0' && hex[i] <= '9') {
decimal += (hex[i] - '0') * base;
} else if (hex[i] >= 'A' && hex[i] <= 'F') {
decimal += (hex[i] - 'A' + 10) * base;
} else if (hex[i] >= 'a' && hex[i] <= 'f') {
decimal += (hex[i] - 'a' + 10) * base;
} else {
// 非16进制字符,返回-1表示输入有误
return -1;
}
base *= 16;
}
return decimal;
}
```
主函数中的代码不需要修改,可以直接使用。
阅读全文