while((garbage = getchar()) != '\n' && garbage != EOF)
;
基本上是一个非常压缩的版本:
garbage = getchar();
while ( garbage != '\n' && garbage != EOF )
garbage = getchar();
基本上,读取并丢弃标准输入中的任何字符,直到我们看到换行符或文件结束信号。
C 条件表达式可以包含赋值:
while ( x = foo() ) // assign result of foo() to x, loop if non-zero
{
// do something
}
由于 很多 人在意为 == 时不小心输入了 =,因此大多数编译器都会警告条件表达式中的赋值表达式除非该表达式是用括号括起来:
while ( (x = foo()) ) // assign result of foo() to x, loop if non-zero
{
// do something
}
这告诉编译器“是的,我打算将foo()的结果分配给x并根据结果循环,闭嘴。”
C 中的赋值表达式可以作为更大表达式的一部分出现。赋值表达式的结果是经过任何适当转换后存储在目标中的值。因此,赋值表达式的结果也可以与其他内容进行比较,因此您可以编写
while ( (x = foo()) > 0 ) // assign result of foo() to x, loop while result is positive
{
// do something
}
您可以进行多重比较:
while ( (x = foo()) > 0 && x < 100 )
{
// do something
}
&& 运算符强制从左到右评估 - (x = foo()) > 0 将首先评估,为 x 分配一个新值作为副作用。如果结果非零(x 为正),则将评估 x < 100。同样,这是一种简洁的写作方式:
x = foo();
if ( x > 0 && x < 100 )
{
// do something
x = foo();
}