UD_Lying @ 2018-11-24 23:34:27
首先这里贴的是最后通过的,大佬请直接看错误的地方
#include<iostream>
#define apple_number 10
#define chair_high 30
inline int touch_max(int human_high)
{
return human_high+chair_high;
}
int main()
{
int human_high;
int apple_high[apple_number];
int i=0;
int ability_touch_number=0;
while(i<apple_number)
{
std::cin>>apple_high[i];
i++;
}
std::cin>>human_high;
for(i=0;i<apple_number;i++)
{
if(touch_max(human_high)>=apple_high[i])
{
ability_touch_number++;
}
if(apple_high[i]>200||apple_high[i]<100||human_high>120||human_high<100)
{
std::cout<<"fuck you,bitch"<<std::endl;
return -1;
}
}
std::cout<<ability_touch_number<<std::endl;
return 0;
}
这是之前出错的
#include<iostream>
#define apple_number 9
#define chair_high 30
inline int touch_max(int human_high)
{
return human_high+chair_high;
}
int main()
{
int human_high;
int apple_high[apple_number];
int i=0;
int ability_touch_number;
while(std::cin>>apple_high[i],i<apple_number)
{
i++;
}
std::cin>>human_high;
for(i=0;i<apple_number;i++)
{
if(touch_max(human_high)>=apple_high[i])
{
ability_touch_number++;
}
if(apple_high[i]>200||apple_high[i]<100||human_high>120||human_high<100)
{
std::cout<<"fuck you,bitch"<<std::endl;
return -1;
}
}
std::cout<<ability_touch_number<<std::endl;
return 0;
}
这种代码居然还能得分80分!真是太过分了!
我 _一开始定义的applenumber是10 ,可是发现输入11个数字(包含身高)后并没有输出结果,需要再次输入一个,也就是一共12个数字。
之后才 _把applenumber改为9 ,发现居然可以将题目下面给的输入通过! 之后居然还得分80分,真的被骚到了。
由于当时写这一段的时候脑抽了,没考虑到顺序,只想到了这个意思,就这么随手写上去了。 于是while被我写成了
while(std::cin>>apple_high[i],i<apple_number)
也就是在判断条件之前就赋值了,这样会在i已经等于apple_number的时候,还会进行一次赋值。 当然,这是不可能赋值到数组占用的房间里面的!
这样按理说应该是不会通过测试的啊!
我这么可爱的家伙怎么可能会犯这样的错呢! 也正是这个错误,把我一开始修改的思路搞乱了。 这个ability_touch_number没有初始化值! 经过可爱的冷静思索发现:
它的初值是1!
它的初值是1!
它的初值是1!
然后就这么把错误答案+1变成了正确答案! 真是bug+bug=debug啊!
当然,修改的方法不只这么一种,写这个的目的也是希望大家注意一下出错的问题,大佬们就当一个笑话来看吧!
by sahmaykf @ 2018-11-24 23:37:52
第一感觉 为什么变量名要这么长
by UD_Lying @ 2018-11-24 23:47:40
@sahmaykf 个人的变量命名习惯吧,这样看得懂一些。对于长一点的程序,一般还要加上它的类型来避免BUG,比如
int INT32_AppleNumber;
by 时崎·狂狂帝 @ 2018-11-25 00:38:40
那到时候您写工程手敲烂了,手滑了,写疯了,改封了,一切由您自己全权负责哦
您应该知道,长度越长,写错的可能性越大吧?
假如 INT32_Sea 打成了 INT32_See,我想在那么长的代码里不容易发现吧?
by nofall @ 2018-11-25 00:53:09
+1
by UD_Lying @ 2018-11-25 02:03:11
@时崎·狂狂帝 C/C++的话丝毫不畏惧呢,规则规定了变量和函数必须事先声明定义才可以使用。编译器就可以代替程序员去检查这种错误呢。这种命名法则也是很多非常厉害的程序员教我的呢...
by 时崎·狂狂帝 @ 2018-11-25 07:06:46
@UD_Lying 对啊,可问题是你两个都定义了,还有不同意义?小心参数调死人。。。
by Priori_Incantatem @ 2018-11-25 08:25:33
fuck you,bitch
应该全大写吧
by UD_Lying @ 2018-11-25 09:33:42
@BrianPan 你是想骂人更爽一些吗。。。
by UD_Lying @ 2018-11-25 09:35:54
@BrianPan 这个我只是作为超出范围后的报错信息使用的
by sahmaykf @ 2018-11-25 10:39:38
@UD_Lying 也是 不同人看的感觉不一样 随个人喜欢