|
|
你说得对,程序“卡死”其实就是**死循环**,而不是电脑卡住了。原因在于两种写法中 `getchar()` 被调用的次数完全不同。
先看第一种写法:
char ch = getchar();
while (ch != '\n')
{
// 循环体
}
这里 `getchar()` 只在循环前执行一次。如果第一次读到的字符不是换行符,那么 `ch` 的值就永远是那个字符。只要循环体里没有再次修改 `ch`(也没有 `break` 跳出),条件 `ch != '\n'` 就一直成立,于是无限循环,看起来就像卡死。
再看你写的第二种:
while ((char ch = getchar()) != '\n')
{
// 循环体
}
这里 `getchar()` 被放在了循环条件里,每次循环开始都会重新读取一个字符。所以它会不断读入下一个字符,直到读到换行符为止,不会死循环。
不过要注意:在标准 C 语言中,`while` 的条件里不能这样定义变量,`while ((char ch = getchar()) != '\n')` 实际上是语法错误(C++ 部分标准允许)。正确写法应该是:
int ch;
while ((ch = getchar()) != '\n')
{
// 循环体
}
顺便提醒,`getchar()` 返回的是 `int`,用 `char` 保存可能会把 EOF 误判成普通字符,所以用 `int` 更安全。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|