gpt4 book ai didi

c - 第二个 "ch = getchar(); "有什么意义

转载 作者:行者123 更新时间:2023-11-30 20:02:49 25 4
gpt4 key购买 nike

int main(void)
{
char ch;
int len = 0;

printf("Enter a message: ");
ch = getchar();

while (ch != '\n')
{

len = len + 1;
ch = getchar();
}
printf("Your message was %d characters long\n", len);


return 0;


}

我理解第一个“ch = getchar(); ”,因为它是从 printf 语句中读取字符,但我不理解 while 循环中第二个“ch = getchar(); ”的目的。

最佳答案

这是试图循环读取字符,直到读取换行符为止,它只是以一种奇怪的方式进行:通常我希望只看到一个 getchar()作为循环本身的一部分。

这将是编写相同内容的更习惯的方式:

#include <stdio.h>

int main(void)
{
int ch; // note: not char!
int len = 0;

printf("Enter a message: ");

while ( (ch = getchar()) != EOF && ch != '\n')
len++;

printf("Your message was %d characters long\n", len);

return 0;
}

我们在这里看到一些变化。

首先,我们看到 ch = getchar()循环条件本身的赋值:获取一个字符,只要我们还没有完成(无论如何定义),就继续进行并继续计数。

但我们还必须检查 EOF - 文件结束 - 表示输入结束,因此测试也在此处完成。如果测试失败,代码将不断循环,因为它永远不会得到EOF。始终检查文件末尾!

重要:您确实必须使用 int变量来接收来自 getchar() 的返回,不是char 。惊喜!原因是EOF通常为 -1 ( EOF must be negative ),并且 getchar() 返回 EOF 或下一个 ' 字符作为 unsigned char转换为int '(通常,值为 0..255)。这比普通 char 中可以存储的值还要多。 ,因此使用 int 至关重要而不是char变量,以便您可以确保正确检测 EOF。

也是 len++ 的简单简化对于 len = len + 1 .

原始循环或多或少执行相同的操作,但没有将 get + check 部分合并为一个。

关于c - 第二个 "ch = getchar(); "有什么意义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59418690/

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