题
我感到困惑 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程序之前。
在这里看到的输入问题的讨论