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

题目:

for (i = 0;i < lim - 1 && (c = getchar()) != '\n' && c != EOF; ++i)
    s[i] = c;
不用&&和||的条件下编写一个与上面的for循环语句等价的循环语句

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

enum loop {NO, YES}
enum loop okloop = YES;

i = 0;

while (okloop == YES)
    if (i >= lim-1)
        okloop = NO;
    else if ((c = getchar()) == '\n')
        okloop = NO;
    else if (c == EOF)
        okloop = NO;
    else {
        s[i] = c;
        ++i;
    }

C 变量与常量 数据类型中我们提到了枚举常量这个概念,当时我把它比作数组,但是看了enum loop okloop = YES,就会感觉有些困惑了,这个是什么呢?搜了一下,感觉有点像类与对象的概念一样。

比如:

enum DAY
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
};

我们把上面称为定义
而下面才是声明

enum DAY yesterday;
enum DAY today;
enum DAY tomorrow; //变量tomorrow的类型为枚举型enum DAY
enum DAY good_day, bad_day; //变量good_day和bad_day的类型均为枚举型enum DAY

我们设了一个变量,然后把定义中的值拿出来赋给变量,确实有点像对象的意思吧?

回到题目,其实也就是通过循环条件依次检查,不满足就跳出,全部满足再执行,这样才能满足原来的语句。

关于枚举型的扩展阅读:http://www.cnblogs.com/JCSU/articles/1299051.html

植入部分

如果您觉得文章不错,可以通过赞助支持我。

如果您不希望打赏,也可以通过关闭广告屏蔽插件的形式帮助网站运作。

标签: 源码, 代码段, 题目

仅有一条评论

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

添加新评论