首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在这里写的时候没有人?

为什么在这里写的时候没有人?
EN

Stack Overflow用户
提问于 2016-08-09 18:29:42
回答 5查看 265关注 0票数 3

为什么while循环是在这个代码中写的而没有主体呢?是干什么的呢?索引和长度都是整数,我正在从txt文件中读取。

代码语言:javascript
复制
  // ignore alphabetical strings too long to be words
        if (index > LENGTH)
        {
            // consume remainder of alphabetical string
            while ((c = fgetc(fp)) != EOF && isalpha(c));

            // prepare for new word
            index = 0;
        }
EN

回答 5

Stack Overflow用户

发布于 2016-08-09 18:33:41

为了更好地理解正在发生的事情,可以将循环重写如下:

代码语言:javascript
复制
do {
    c = fgetc(fp);
} while (c != EOF && isalpha(c)); 

它从文件描述符中读取一个字符,然后检查它是字母字符还是EOF。

原始循环所做的是将赋值作为条件内的子表达式执行,从而使主体保持空白。

票数 4
EN

Stack Overflow用户

发布于 2016-08-09 18:33:31

为什么在这里写的时候没有人?

TL;DR -因为,它可以编写,并达到了代码的预期目的。

详细说明,在代码中

代码语言:javascript
复制
while ((c = fgetc(fp)) != EOF && isalpha(c));

&&操作符及其属性被用作用于循环语句的控制表达式的一部分。条件检查在while中保持为TRUE (1),只要&&的两个操作数计算为TRUE (1)。一旦它们中的任何一个不是真,循环就会结束。

为了清楚起见,直到(c = fgetc(fp)) != EOF isalpha(c)计算为非零值(TRUE)时,循环锥(带空体)。

fgetc()isalpha()的主页可能会有进一步的帮助。

票数 2
EN

Stack Overflow用户

发布于 2016-08-09 18:51:33

这个while是在没有主体的情况下编写的,因为操作是在while循环的condition部分执行的。

如果看到循环的条件,则如下所示:

代码语言:javascript
复制
((c = fgetc(fp)) != EOF && isalpha(c))

当计算第一个条件(即(c = fgetc(fp)) != EOF )时,执行c = fgetc(fp),从文件中读取一个字节。首先检查这个字节是否是EOF,它表示文件的结束,如果不是EOF,则检查它是否为非字母表字符。

从文件中读取一个字节的操作继续进行,直到读取一个非字母表字符或到达文件的末尾为止。

因此,这段代码的基本功能是,每当index超过LENGTH时,它首先读取剩余的alphabets - -不做任何-操作,直到读取非alpbabet或文件结束为止。然后将index设置为0

虽然也可以用不同的方式写,这样它就不会有一个空的身体。但是,您所看到的是一个常见的idiom中的C

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38857976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档