第二句话的意思是什么;ch=getchar()&引用;
我理解第一个“ch=getchar();”,因为这是从printf语句中读取字符,但我不理解while循环中第二个“ch=getchar();”的用途 获取在按enter键之前键入的所有字符。第二句话的意思是什么;ch=getchar()&引用;,c,C,我理解第一个“ch=getchar();”,因为这是从printf语句中读取字符,但我不理解while循环中第二个“ch=getchar();”的用途 获取在按enter键之前键入的所有字符。 getchar一次只读取一个字符。这是在读取换行符之前尝试循环读取字符,这只是以一种奇怪的方式进行的:通常我只希望看到一个getchar()作为循环本身的一部分 这将是一种更习惯的方式来写同样的东西: int main(void) { char ch; int len = 0;
getchar一次只读取一个字符。这是在读取换行符之前尝试循环读取字符,这只是以一种奇怪的方式进行的:通常我只希望看到一个
getchar()
作为循环本身的一部分
这将是一种更习惯的方式来写同样的东西:
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;
}
#包括
内部主(空)
{
int ch;//注意:不是字符!
int len=0;
printf(“输入消息:”);
而((ch=getchar())!=EOF&&ch!='\n')
len++;
printf(“您的邮件长度为%d个字符,\n”,len);
返回0;
}
我们在这里看到一些变化
首先,我们在循环条件本身中看到ch=getchar()
但是我们还必须检查EOF
-文件结束-这表示输入结束,所以测试也在这里完成。如果测试失败,代码将不断循环,因为它永远不会得到EOF。始终检查文件结尾
重要:您确实必须使用int
变量来接收来自getchar()
的返回,而不是char
。惊喜原因是EOF
通常为-1(),并返回EOF或下一个“字符,作为转换为int
”的unsigned char
”(通常为值0..255)。这比普通char
存储的值要多,因此使用int
而不是char
变量至关重要,这样您就可以确保正确检测EOF
对于len=len+1
,对len++
也进行了简单的简化
原始循环的作用大致相同,但没有将get+check部分合并为一个。第二个ch=getchar
读取一个字符,但它位于while循环中,因此getchar()
将从输入中逐个读取字符,直到输入中出现换行符。如果在输入中输入一个类似“Hello World”的字符串,然后按enter键,则程序将读取“Hello World\n”,然后while循环将增加一个变量len,以计数输入中的字符,当getchar
读取'\n'
时,while循环将结束,printf()
显示“正在读取字符”字符串的长度。它在读一个字符。或者,如果想要避免复杂的、包含赋值的条件,可以使用:while(1){int ch=getchar();if(ch==EOF | | ch=='\n')break;++len;}
#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;
}