#include<stdio.h>
int main(void)
{
int la,lb,lc;
char ch;
//la=lb=lc=0;
while((ch=getchar())!='#')
{
if(ch==' '){la++;}
else if(ch=='\n'){lb++;}
else{lc++;}
}
printf("空格有%d 换行符有%d 其他有%d",la,lb,lc);
}
这是源码,问题点出现在注释行。以只输入#为例。
没有注释行,输出结果为0 1 0
有注释行,输出结果为0 0 0
把lb和la lc任意一个换位置,倒霉的还是lb
去掉一个,改成其中一个两次,倒霉就变成了以lc为最高优先级,有lc就倒霉lc,其次再看lb。
a a b 010 a a c 001(有c)
b b a 010 b b c 001(有c)
c c a 001(有c) c c b 001(有c)
a b b 010 c b b 001(有c)
a c c 001(有c) b c c 001(有c)
b a a 010 c a a 001(有c)
a b a 010 a c a 001(有c)
b a b 010 b c b 001(有c)
c a a 001(有c) c b c 001(有c)
如果是三个一样的,就不会发生任何倒霉改变事件。
这很疑问,这是放在三个不同的条件判断里,按理说必须要满足相对应条件才会进去,但是为什么会出现有c就是c倒霉的情况。