为什么while循环是在这个代码中写的而没有主体呢?是干什么的呢?索引和长度都是整数,我正在从txt文件中读取。
// 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;
}发布于 2016-08-09 18:33:41
为了更好地理解正在发生的事情,可以将循环重写如下:
do {
c = fgetc(fp);
} while (c != EOF && isalpha(c)); 它从文件描述符中读取一个字符,然后检查它是字母字符还是EOF。
原始循环所做的是将赋值作为条件内的子表达式执行,从而使主体保持空白。
发布于 2016-08-09 18:33:31
为什么在这里写的时候没有人?
TL;DR -因为,它可以编写,并达到了代码的预期目的。
详细说明,在代码中
while ((c = fgetc(fp)) != EOF && isalpha(c));&&操作符及其属性被用作用于循环语句的控制表达式的一部分。条件检查在while中保持为TRUE (1),只要&&的两个操作数计算为TRUE (1)。一旦它们中的任何一个不是真,循环就会结束。
为了清楚起见,直到(c = fgetc(fp)) != EOF 和 isalpha(c)计算为非零值(TRUE)时,循环锥(带空体)。
fgetc()和isalpha()的主页可能会有进一步的帮助。
发布于 2016-08-09 18:51:33
这个while是在没有主体的情况下编写的,因为操作是在while循环的condition部分执行的。
如果看到循环的条件,则如下所示:
((c = fgetc(fp)) != EOF && isalpha(c))当计算第一个条件(即(c = fgetc(fp)) != EOF )时,执行c = fgetc(fp),从文件中读取一个字节。首先检查这个字节是否是EOF,它表示文件的结束,如果不是EOF,则检查它是否为非字母表字符。
从文件中读取一个字节的操作继续进行,直到读取一个非字母表字符或到达文件的末尾为止。
因此,这段代码的基本功能是,每当index超过LENGTH时,它首先读取剩余的alphabets - -不做任何-操作,直到读取非alpbabet或文件结束为止。然后将index设置为0。
虽然也可以用不同的方式写,这样它就不会有一个空的身体。但是,您所看到的是一个常见的idiom中的C。
https://stackoverflow.com/questions/38857976
复制相似问题