【关于scanf和输入缓冲区的问题】

新手上路,请多包涵

为什么用scanf输字符串,用键盘打完字符串后按回车,scanf不会读取回车这个字符。但是当回车这个字符在键盘输入缓冲区的时候,遇到scanf(“%s”,&a),scanf又能读取回车这个字符了?那到底scanf能不能读取回车这个字符呢。

阅读 4.3k
2 个回答

当然是可以的,只不过默认情况下scanf会以换行作为输入的边界,当读取到换行符的时候就停止读取了。
而当开始读取时并且缓冲区中只有换行符时,scanf不会输出这个空字符串,而仍然是等待输入,所有行首会读到这个换行符。

scanf 是能读取换行符的

为什么用scanf输字符串,用键盘打完字符串后按回车,scanf不会读取回车这个字符。??

因为 scanf 读取输入的时候,要设定结束条件,在遇到空白字符(空格,换行符)等,读取结束,这时换行符是作为结束条件的,scanf 的特性是不读取这个换行符。

当 换行符在 输入缓冲的时候,就可以读取换行符。

所以,并不是在什么条件下读不读取换行符,而是换行符是什么作用。

换个函数 gets() 已换行符作为结束,但是可以读取最后的换行符

你可以试试

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进