C 将字符转换为整数会产生一个负数吗?
我试图找到一系列字符的平均值。我假设在对字符执行数学运算之前,我需要将字符转换为整数,所以我会这样做,然后在最后将其转换回字符 我看到的问题是,任何具有3位数字的字符都转换为负整数值。两位数的值打印得非常完美。我可以通过在for循环中执行print语句看到这一点。见下面的输出: 我的代码如下:C 将字符转换为整数会产生一个负数吗?,c,function,loops,char,integer,C,Function,Loops,Char,Integer,我试图找到一系列字符的平均值。我假设在对字符执行数学运算之前,我需要将字符转换为整数,所以我会这样做,然后在最后将其转换回字符 我看到的问题是,任何具有3位数字的字符都转换为负整数值。两位数的值打印得非常完美。我可以通过在for循环中执行print语句看到这一点。见下面的输出: 我的代码如下: void main() { int max; int min; int median; int mean; unsigned char test[SIZE] = { 34, 201
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, 87, 177, 244,
201, 6, 12, 60, 8, 2, 5, 67,
7, 87, 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;
}
void main(){
int max;
int-min;
整数中值;
整数均值;
无符号字符测试[SIZE]={342011901548194,2,6,
114, 88, 45, 76, 123, 87, 25, 23,
200, 122, 150, 90, 92, 87, 177, 244,
201, 6, 12, 60, 8, 2, 5, 67,
7, 87, 250, 230, 99, 3, 100, 90};
平均值=找到平均值(测试);
printf(“%d”,平均值);
/*这里有统计和打印功能*/
}
char find_平均值(char*x){
int值=0;
整数和=0;
int平均值=0;
char表示_char;
对于(int i=0;i
更改此选项:
char find_mean(char * x)
为此:
unsigned char find_mean(unsigned char * x)
由于数组的类型为无符号字符
。相同的更改适用于:
char mean_char;
致:
现在您的输出是(将sum print更改为printf(“%d\n”,sum);
):
这是正确的,因为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);
| ~~~~~~~^
您在一个位置使用了
无符号字符
,但不是所有字符。为什么?请不要发布文本图像。您可以直接将文本从控制台窗口复制并传递到帖子中。谢谢,我应该更加注意字符类型!
...
3759
mean = 93
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);
| ~~~~~~~^