Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
第二句话的意思是什么;ch=getchar()&引用;_C - Fatal编程技术网

第二句话的意思是什么;ch=getchar()&引用;

第二句话的意思是什么;ch=getchar()&引用;,c,C,我理解第一个“ch=getchar();”,因为这是从printf语句中读取字符,但我不理解while循环中第二个“ch=getchar();”的用途 获取在按enter键之前键入的所有字符。 getchar一次只读取一个字符。这是在读取换行符之前尝试循环读取字符,这只是以一种奇怪的方式进行的:通常我只希望看到一个getchar()作为循环本身的一部分 这将是一种更习惯的方式来写同样的东西: int main(void) { char ch; int len = 0;

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

获取在按enter键之前键入的所有字符。
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;
}