#include <stdio.h> #include <string.h> #include <math.h> int change(char a[], int len); int main() { char char16[8]; int int10; scanf("%s", char16); int10 = change(char16, strlen(char16)); printf("%d", int10); return 0; } int change(char a[], int len) { int sum = 0; char b[len-1]; for (int j = 0; j < len; ++j) { if (a[j] >= 'a' && a[j] <= 'f') { a[j] = a[j] - 'a' + 10; } else { a[j] = a[j] - '0'; } } for (int k = 0; k < len-1; ++k) { b[k] = a[k+1]; } if (len == 1) { sum += a[0]; } else { sum = a[0] * (int)pow(16, len-1) + change(b, len-1); } return sum; }请问用这段代码实现十六进制转化成十进制为什么得到的是负数
时间: 2023-06-19 22:05:19 浏览: 59
在这段代码中,当输入的十六进制数的最高位为8或以上的时候,即大于等于十进制数128时,会出现负数的情况。
这是因为在这个程序中使用的是有符号整型,其最高位为符号位,当最高位为1时,代表负数。而在进行十六进制转化成十进制的过程中,可能会出现最高位为1的情况,导致结果为负数。
要解决这个问题,可以将使用的数据类型改为无符号整型,即将int改为unsigned int即可。
相关问题
#include<stdio.h> #include<math.h> #include<string.h> #include <stdlib.h> char* change(char *s[], int n); int main(void) { char poem[4][20]; int n,i; for (i = 0; i < 4; i++) { scanf("%s", poem[i]); } printf("%s",change(poem, 4)); return 0; } char* change(char *s[], int n) { char* a = NULL; a = (char*)malloc(sizeof(char) * 10); int i; for (i = 0; i < n; i++) { a[2 * i] = s[i][0]; a[2 * i + 1] = s[i][1]; } a[2 * i] = '\0'; return a; }输入一首诗,这段代码并没有输出由每行诗首个字组成的字符串,原因出在哪里?
这段代码的问题在于,输入的诗歌没有按照要求存储在 char poem[4][20] 数组中。程序中使用了 scanf("%s", poem[i]) 来读取每一行诗,但是并没有限制每一行诗的长度。如果输入的某一行诗的长度超过了 19 个字符,就会导致数组越界,从而出现未定义的行为。
为了避免这种情况,可以使用 fgets() 函数来读取每一行诗,同时指定读取的最大字符数为 19(因为每一行最多只有 19 个字符,再加上一个空字符)。
修改后的代码如下所示:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* change(char *s[], int n);
int main(void)
{
char poem[4][20];
int n, i;
for (i = 0; i < 4; i++)
{
fgets(poem[i], sizeof(poem[i]), stdin);
}
printf("%s", change(poem, 4));
return 0;
}
char* change(char *s[], int n)
{
char* a = NULL;
a = (char*)malloc(sizeof(char) * 10);
int i;
for (i = 0; i < n; i++)
{
a[2 * i] = s[i][0];
a[2 * i + 1] = s[i][1];
}
a[2 * i] = '\0';
return a;
}
```
修改后的代码中使用了 fgets() 函数来读取每一行诗,同时使用 sizeof(poem[i]) 来指定最大的字符数。由于每一行最多只有 19 个字符,再加上一个空字符,因此最大的字符数为 20。
阅读全文