c/c++语言开发共享对getchar()函数感到困惑

我对以下代码中getchar()的作用感到困惑。 我的意思是我知道它帮助我看到输出窗口,只有在按下Enter键时才会关闭。

所以getchar()基本上等着我按回车然后再读一个字符。

这个函数读取的单个字符是什么? 我没有按下键盘上的任何键来阅读。

现在当它没有读任何东西时,为什么它没有给出错误说“嘿,你没有输入任何东西供我阅读”?

 #include  int main() { printf( "blah n" ); getchar(); return 0; } 

    getchar()函数将一直等到收到一个字符,然后保持程序直到它为止。

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

    有关一个很好的解释,请参阅此CodingHorrorpost 。

    (… CR + LF部分的解释,而不是getchar()阻塞部分)

    那是因为getchar()是一个阻塞函数。

    你应该阅读有关阻塞函数的内容 ,它们基本上会使进程等待某些事情发生。

    这种等待行为的实现取决于函数,但通常它是一个等待某些事件发生的循环。

    对于getchar()函数的情况,这可能实现为一个循环,不断读取文件(本案例为stdin)并检查天气文件是否被修改。 如果文件被修改,则循环通过执行其他操作来表现。

    试试这个:

     #include  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 %cn", ch); else printf("nAliens have taken over standard input! Run!n"); return 0; } 

    getchar()将导致程序进入睡眠状态,直到收到键盘(或连接到stdin的任何内容)中断为止。 这意味着它是阻塞的,在getchar()返回之前不会执行任何其他代码。

    查看函数的返回值以了解它非常非常有用。

    任何函数都可能阻塞,除非它提供了一些防止阻塞的机制。 例如, open()允许O_NONBLOCK标志,这有助于打开缓慢响应设备,如调制解调器。 简而言之,如果它从终端获得输入或者必须等待从内核或某些设备获得答案,那么它很可能会阻塞。

    getchar()会阻止程序的执行,直到按下某个键。 所以,如果没有按下按键就没有错误,getchar()将等待它发生:)

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

    需要了解更多c/c++开发分享对getchar()函数感到困惑,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!

      以上就是c/c++开发分享对getchar()函数感到困惑相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/979788.html

      (0)
      上一篇 2021年12月13日
      下一篇 2021年12月13日

      精彩推荐