boringhen @ 2023-10-24 13:04:31
#include <bits/stdc++.h>
using namespace std;
int main()
{
char arr[9],a,c;
int b;
scanf("%c-%c%c%c-%c%c%c%c%c-%c",&arr[0],&arr[1],&arr[2],&arr[3],&arr[4],&arr[5],&arr[6],&arr[7],&arr[8],&a);
for(int i=0;i<9;i++)
{
b +=(i+1)*(arr[i]-48);
}
b %=11;
if( b<10 )
{
c = b+48;
}
else
{
c = 'X';
}
if(a==c)
{
cout <<"Right";
}
else
{
printf("%c-%c%c%c-%c%c%c%c%c-%c",arr[0],arr[1],arr[2],arr[3],arr[4],arr[5],arr[6],arr[7],arr[8],c);
}
system("pause");
return 0;
}
//在b %=11后,b会正常的等于4,问题出在b到c的转化的时候,如果用if语句让c=b+48的话c就会诡异的等于9,输出时又变成8,然而如果去掉if直接让c=b+48的话,c又会正常的等于4,是不是代码之神生气了罚我这个bug
by CooooldWind_ @ 2023-10-24 13:13:10
这边建议重构:Ctrl+A Del
by silverleo @ 2023-10-24 13:19:22
int b=0;
变量没有赋初值,代码之神确实有点生气了吧
by 2021zjhs005 @ 2023-10-24 13:21:34
添加一行 b=0
,或者放在 int main()
前面作为全局变量自动清零。
若是局部变量(在 int main
里面),则变量会是一个随机值,用来累加的变量一定要清零。
by boringhen @ 2023-10-24 13:26:30
@silverleo 加上去果然ac了,感谢!
by boringhen @ 2023-10-24 13:28:49
@2021zjhs005 加上去果然ac了,感谢!不过我还有一点点不懂的地方,为什么最开始不清零可以正常运行,到了转化的地方才突然变成随机值,我debug的过程中发现累加是正常运行的,但一转化b马上就变成一个随机值了
by Azote @ 2023-10-24 13:31:39
@boringhen 他会找一个地址存b,你不赋值的话原来地址上是什么b就是什么
by AC_love @ 2023-10-24 13:31:45
把变量定义在 main()
函数里是个很不吉利的事(确信
反正很多新手都犯过和你类似的错误,建议还是定义成全局变量
by only_a_speaker @ 2023-10-24 13:36:25
您好,当你定义局部变量时,请赋初值。
全局变量之所以“不需要赋初值”,并非不需要初值,而是天然被赋为 0
。
by ShadowWalker @ 2023-10-24 13:40:33
对于局部变量来说,不赋值时它会是随机数,所以尽量要用全局变量,这样它就会自动赋值为0
by boringhen @ 2023-10-24 13:44:16
@AC_love 我们程序设计的老师说尽量不要使用全局变量,应该是从实际项目而不是竞赛的角度考虑的,我还在纠结这个习惯问题