如何解决将char转换为整数会创建负数吗?
我正在尝试查找字符数组的均值。我认为在对它们执行数学运算之前,需要先将其转换为整数,然后再将其转换回char。
我看到的问题是任何3位数字的char都将转换为负整数值。两位数值完美打印。我可以通过在for循环中执行一条print语句来看到这一点。参见下面的输出:
我的代码如下:
void main() {
int max;
int min;
int median;
int mean;
unsigned char test[SIZE] = { 34,201,190,154,8,194,2,6,114,88,45,76,123,87,25,23,200,122,150,90,92,177,244,12,60,5,67,7,250,230,99,3,100,90};
mean = find_mean(test);
printf("%d",mean);
/* Statistics and Printing Functions Go Here */
}
char find_mean(char * x) {
int value = 0;
int sum = 0;
int mean = 0;
char mean_char;
for (int i = 0; i < SIZE; i++) {
int value = x[i];
printf("%d\n",value);
sum += value;
}
printf("%d",sum);
mean = sum/SIZE;
mean_char = mean;
return mean_char;
}
解决方法
更改此:
char find_mean(char * x)
对此:
unsigned char find_mean(unsigned char * x)
因为您的数组的类型为unsigned char
。相同的更改:
char mean_char;
收件人:
unsigned char mean_char;
现在您的输出是(将总打印数更改为printf("%d\n",sum);
之后):
...
3759
mean = 93
这是正确的,因为SIZE
是40,所以3759/40 = 93。
启用编译器警告可以轻松捕获此类问题。例如,在通过-Wall -Wextra
标志的GCC中,我得到:
prog.c:22:20: warning: pointer targets in passing argument 1 of 'find_mean' differ in signedness [-Wpointer-sign]
22 | mean = find_mean(test);
| ^~~~
| |
| unsigned char *
prog.c:7:23: note: expected 'char *' but argument is of type 'unsigned char *'
7 | char find_mean(char * x);
| ~~~~~~~^
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。