关于 c/c++流(stream)的理解&&总结(持续更新)

理解

参考资料: c++primer,c程序设计语言

在读c++primer以及之前学习 I/O流相关的内容,总是觉得流的概念非常抽象,尤其网上很多博客提到“像水流一样”,很难理解,缺乏具体的感性认识。特别是没有搞清楚iostream和fstream的数据写入、写出方向


c++中的IO库类型和头文件:

头文件类型
iostreamistream 从流读取数据
.ostream 向流写入数据
fstreamifstream 从文件读取数据
.ofstream 向文件写入数据
sstreamistringstream 从string读取数据
.ostringstream 向string写入数据

《c程序设计语言》中提到:

流(stream)是与磁盘或其他外围设备关联的数据的源或目的地。
打开一个流,将把该流与一个文件或设备连接起来,关闭流将断开这种连接。

结论

流是 与 磁盘或其他外围设备 关联的 数据的源或目的地。不管是c或是c++,都可以理解为

  • 打开一个输入、输出流,就是将该流与文件或设备连接起来
  • 打开一个输入、输出流,就是打开 关联设备的 源 或 目的地

解释

输入流总是 作为 所连接设备、文件的 数据源,而输出流总是 作为 所连接设备、文件的 目的地。

  • 输入流就是把数据(键盘输入、文件内容、string内容、外围设备)读入到内存(程序)中
    数据源 ----> 内存程序

  • 输出流就是把内存(程序)中的数据输出(屏幕显示、文件、string)
    内存程序 ----> 目的地


总结(持续更新)

  1. scanf
    • 在 scanf 中,从键盘输入的一切数据,不管是数字、字母,还是空格、回车、Tab 等字符,都会被当作数据存入缓冲区。存储的顺序是先输入的排前面,后输入的依次往后排。

    • 按回车键的时候 scanf 开始进入缓冲区取数据,从前往后依次取。

    • %d 只识别“十进制整数”。对 %d 而言,空格、回车、Tab 键都是区分数据与数据的分隔符。当 scanf 进入缓冲区中取数据的时候,如果 %d 遇到空格、回车、Tab 键,那么它并不取用,而是跳过继续往后取后面的数据,直到取到“十进制整数”为止。对于被跳过和取出的数据,系统会将它从缓冲区中释放掉

      • 如果 %d 遇到字母,那么它不会跳过也不会取用,而是直接从缓冲区跳出.
      • 被跳过或取出的数据,系统会将它一直放在缓冲区中,直到下一个 scanf 来获取。
    • %c,任何数据都会被当作一个字符,不管是数字还是空格、回车、Tab 键它都会取回。

参考资料:使用scanf的注意事项

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值