大一新生C++一个题

如题,大一新生C++练习题
正解我已经会了,但是我歪打正着胡写的代码居然运行正常,试了很多组都是对的,但是提交后只得一半的分数,就不知道这为什么对了,
又为什么错了,完全是懵的状态。
/*标题
累加和校验
问题描述
数据传输中一种常见的校验方式是累加和校验。其实现方式是在一次通讯数据包的最后加入一个字节的校验数据。
这个校验字节内容为前面数据包中所有数据按字节累加所得结果的最后一个字节。例如:


要传输的信息为: TEST(ASCII码为0x54,0x45,0x53,0x54)
四个字节的累加和为:0x54+0x45+0x53+0x54=0x140
校验和为累加和的最后一个字节,即0x40,也就是十进制的64

现在请设计一个程序计算给出的待传输信息的累加校验和

输入说明
输入为一个字符串,字符串长度不超过100个字符

输出说明
输出一个十进制整数,表示输入字符串的累加校验和。

输入样例
TEST
输出
64


```c++

*/
#include
int main()
{
    char(arr[100]);
    gets(arr);
    int sum=0;
    for(int i=0;arr[i]!='\0';i++)
    {
        sum=sum+arr[i];
    }
    printf("%d",sum%256);
}


                                                                以上为正解,且我以明白道理

以下为我的误解,但是与正解答案输出一致,提交到网站评分是50分,不知道为什么对也不知道为什么错
```c++
#include
int main()
{
    char(arr[100]);
    gets(arr);
    char sum='\0';
    for(int i=0;arr[i]!='\0';i++)
    {
        sum=sum+arr[i];
    }
    printf("%d",sum);
}

我的思路比较混乱,因为一开始没看懂题目核心,16进制的点没理解,0X符号也忘了啥意思,所以全凭感觉来。
我的思路:全体字符化,用字符进行加减运算,然后用+'0'转化回数字,但是不对。我就为了赌运气,把'0'改成了'\0',这样很意外的正确了,
但是我完全不知道为什么,当时真的是歪打正着,我的代码为什么对,又为什么只得了50?(满分100)
运行结果 :(随便试试其他的,也是一样的)
输入TEST 输出64

孩子,看看最后有一个取模256
十进制运算中如果我要分离18
取出十位1只要18/10即可获得
取出个位8还是18/10,但是这次取的是余数8
在单片机里面只有二进制
像(65536-50000)这样十进制的最终还是会被转换成二进制写到单片机里面
二进制也是一样的道理要取出高8位 只要除以2八次方也就是256,不就得到高8位的值了
低8位再取余数不就行了

虽然对于这道题来说两种写法结果均正确,但是你自己的写法是 char += char,这可能导致问题 !看下面这张图输出并非你可能认为的153就明白为何扣分了

img

望采纳!!!
测试了下确实是可以的。要看平台判断机制了。可能就是这个强制转化扣的分吧
看下下面的输出,四个结果错了两个,估计这里就是50%的原因吧

#include<stdio.h>
int main()
{
    char arr[5] = {'T','E','S','T','\0'};
    char sum='\0';
    for(int i=0;arr[i]!='\0';i++)
    {
        printf("%d\n",arr[i]);
        printf("%d\n",sum);
        sum=sum+arr[i];
        printf("%d\n",sum);
    }
    printf("%d\n",sum);
}
84
0
84
69
84
-103  --这里【char范围是-128127,补码了】
83
-103 
-20  --这里【char范围是-128127,补码了】
84
-20
64
64

我认为是强制转化扣的分,或者是这样的方法可能会产生越界的危险,有些用例覆盖不到