我感到困惑 getchar()'s的作用,在以下代码。我的意思是我知道它帮助我看出窗口,其中只有被关闭,当我按下 输入 关键。

所以 getchar() 基本上是在等着我到新闻酒然后读取一个单一的角色。

那是什么单字符这一功能阅读?我没有按任何关键的键盘为它读。

现在,当它不阅读任何东西,它为什么不给一个错误说"嘿,你没有进入任何东西对我来读读"?

#include <stdio.h>

int main()
{
    printf( "blah \n" );
    getchar();
    return 0;
}
有帮助吗?

解决方案

getchar()功能将简单地等待,直到它接收到一个字符,保持该程序,直到它的作用。

在按下回车键的字符被发送;下一个Windows操作系统,它将发送一个回车(CR)和换行(LF)。

请参阅用于此CodingHorror帖子很好地把解释。

(...的CR + LF一部分,而不是getchar()阻挡部的解释)

其他提示

那是因为形式()是一个 阻挡 功能。

你应该读读 阻挡的功能, 基本上使该进程 等等 对于发生的事情。

执行这 等待 行为取决于功能,但通常这是一种循环,等待某些事件发生。

对的情况下 getchar() 功能,这也许是实现为一个循环,不断地读一个文件(stdin对于这种情况),并检查气候的文件被修改。如果该文件被修改,该循环的行为,通过做别的事情。

尝试这种情况:

#include <stdio.h>

int main(int argc, char *argv[])
{
    char ch;

    printf("I'm now going to block until you press something and then return... ");

    ch = getchar();

    if (ch >= 0)
       printf("\nYou pressed %c\n", ch);
    else
       printf("\nAliens have taken over standard input! Run!\n");

    return 0;
}

getchar()会导致你的程序才睡觉,一个键盘(或任何连接到标准输入)中断被接收。这意味着它的阻止,不需要额外的代码将执行,直到getchar()回报。

这是非常,非常有帮助看的返回值的功能,以了解它。

任何功能可能会阻止,除非它提供了一些机制,以防止粘连。例如,open()允许O_NONBLOCK标志,它是打开缓慢,像调制解调器响应设备的帮助。总之,如果从终端获取输入或已迫不及待地想从内核或某些设备的答案,有一个非常好的机会,它可能会阻止。

的getchar()块你的程序的执行,直到一个键被按下。因此,有如果没有按键没有错误,getchar函数()将等待它的发生:)

您可以了解更多有关的getchar的行为在这里: http://www.cppreference.com/wiki/c/io/getchar ......这应该回答你的问题:)

我想你混淆是需要回车键以前生产程序继续执行。默认情况下,终端将缓冲所有信息被按下直到输入,甚至将其发送到C程序之前。

在这里看到的输入问题的讨论

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top