gpt4 book ai didi

c - 不明白这个 Infinite While 循环

转载 作者:太空宇宙 更新时间:2023-11-04 05:23:16 25 4
gpt4 key购买 nike

谁能用通俗易懂的语言向我解释这段代码是怎么回事?我知道这是一个用于获取第一个字符然后丢弃剩余输入的函数,但我对最后一个 while 循环感到困惑。当我用谷歌搜索时,我发现了非常复杂的解释,让我难以理解。有一个解释有点道理,但它是一个汇编代码解释,处理内存中堆栈上的输入,然后我的豌 bean 大脑就 NumPy 了。 😋

int get_First(void)
{
int ch, garbage;

do
{
ch = getchar();
}while(isspace(ch));

while((garbage = getchar()) != '\n' && garbage != EOF)
;
return ch;
}

最佳答案

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();
}

关于c - 不明白这个 Infinite While 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49162095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com