for语句的三个参数,第一个是初始化语句,第二个是条件语句,判断循环是否继续执行,第三个是变量变化语句。三个语句中,第一个和第三个都可以不写,第二个必须写。这第二个语句的返回值是true或false(1或0),如果为1 则继续运行循环体。
这个例子中的第二个语句看起来十分复杂,首先先学习 “?:语句”的用法,参见http://www.tyut.edu.cn/kecheng/main/computer/study_C/blank_test1.htm
第十一题。问号前面的语句为真时,该“?:语句”返回冒号前面的值(可以是表达式也可以是数值),当问号前面的语句为假时,该“?:语句”返回冒号后面的值。
知道这个后,看这道题《在此鄙视一下中国出这种题目的人,就喜欢搞这种没有一点点使用价值的弯弯绕》。
i<lim-1 ? (c=getchar()) != '\n' ? c != EOF : 0 : 0
等价于
(i<lim-1) ? ( ((c=getchar()) != '\n' ) ? c != EOF : 0 ) : 0
这是一个两重“?:语句”的嵌套使用(真没程序员这么用的)
语句可以换成
if(i < lim -1)
{
c = getchar();
if( c!= '\n' )
{
// return (c !=EOF);由于c已经不是回车符了,而所有的EOF(end of file)都是回车符,所以等价于直接return 1;
return 1;
}
else
{
return 0;
}
}
else
{
return 0;
}
楼主可以再仔细学习一下语句的划分,怎么把一个多重嵌套的语句分成一个个所属的成分,这个本事不是容易练就的,望楼主学习顺利。
ps:没有任何一个程序员会写这种代码。只要他敢写这种代码,我保证他领不到下个月工资。老板肯定炒他鱿鱼。这种没有任何可读性的代码是不可以存在于程序员代码中的,也就老师实在无聊考考学生。望楼主戒躁,弄懂之后千万别写在自己的代码里。
祝所有学软件的学生前程似锦。
本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。