C 不用与或改一个循环语句 小解枚举型变量
题目:
1for (i = 0;i < lim - 1 && (c = getchar()) != '\n' && c != EOF; ++i)
2 s[i] = c;
3
不用&&和||的条件下编写一个与上面的for循环语句等价的循环语句
题目看着不难,我当时就想着用while
和if
的结合就OK了吧,结果思路方向错了,我想先if
再while
可是这样就跳过了两个条件的重复利用,先while
再if
才是正解,正好答案中还有枚举型的出现,就码来研究了一下。
1enum loop {NO, YES}
2enum loop okloop = YES;
3
4i = 0;
5
6while (okloop == YES)
7 if (i >= lim-1)
8 okloop = NO;
9 else if ((c = getchar()) == '\n')
10 okloop = NO;
11 else if (c == EOF)
12 okloop = NO;
13 else {
14 s[i] = c;
15 ++i;
16 }
17
在C 变量与常量 数据类型中我们提到了枚举常量这个概念,当时我把它比作数组,但是看了enum loop okloop = YES
,就会感觉有些困惑了,这个是什么呢?搜了一下,感觉有点像类与对象的概念一样。
比如:
1enum DAY
2{
3 MON=1, TUE, WED, THU, FRI, SAT, SUN
4};
5
我们把上面称为定义 而下面才是声明
1enum DAY yesterday;
2enum DAY today;
3enum DAY tomorrow; //变量tomorrow的类型为枚举型enum DAY
4enum DAY good_day, bad_day; //变量good_day和bad_day的类型均为枚举型enum DAY
5
我们设了一个变量,然后把定义中的值拿出来赋给变量,确实有点像对象的意思吧?
回到题目,其实也就是通过循环条件依次检查,不满足就跳出,全部满足再执行,这样才能满足原来的语句。
关于枚举型的扩展阅读:http://www.cnblogs.com/JCSU/articles/1299051.html
评论 (1)
```c for (i = 0; (i < lim - 1) + ((c = getchar()) != '\n') + (c != EOF) == 3; s[i++] = c); ```