CodeSky 代码之空

随手记录自己的学习过程

C 不用与或改一个循环语句 小解枚举型变量

2014-02-23 15:38分类: C评论: 1

题目:

1for (i = 0;i < lim - 1 && (c = getchar()) != '\n' && c != EOF; ++i)
2    s[i] = c;
3

不用&&和||的条件下编写一个与上面的for循环语句等价的循环语句

题目看着不难,我当时就想着用whileif的结合就OK了吧,结果思路方向错了,我想先ifwhile可是这样就跳过了两个条件的重复利用,先whileif才是正解,正好答案中还有枚举型的出现,就码来研究了一下。

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)

lujjjh2014年2月23日 19:07

```c for (i = 0; (i < lim - 1) + ((c = getchar()) != '\n') + (c != EOF) == 3; s[i++] = c); ```