std::cin

文章目录

  • std::cin
    • cin>>
    • 从标准输入读取一行字符串的方法
      • getline读取一行
    • 例如

cin>>

cin>> 用于连续从键盘中读取想要的数据以,空格;tab;换行作为分隔符

cin是C++编程语言中的标准输入流对象,即istream类的对象。cin主要用于从标准输入读取数据,这里的标准输入,指的是终端的键盘。此外,cout是流的对象,即ostream类的对象,cerr是标准错误输出流的对象,也是ostream 类的对象。这里的标准输出指的是终端键盘,标准错误输出指的是终端的屏幕。在理解cin功能时,不得不提标准输入缓冲区。当我们从键盘输入字符串的时候需要敲一下回车键才能够将这个字符串送入到缓冲区中,那么敲入的这个回车键(\r)会被转换为一个换行符\n,这个换行符\n也会被存储在cin的缓冲区中并且被当成一个字符来计算!比如我们在键盘上敲下了123456这个字符串,然后敲一下回车键(\r)将这个字符串送入了缓冲区中,那么此时缓冲区中的字节个数是7 ,而不是6。

需要注意

  • cin>>等价于cin.operator>>(),即调用成员函数operator>>()进行读取数据。
  • 当cin>>从缓冲区中读取数据时,若缓冲区中第一个字符是空格、tab或换行这些分隔符时,cin>>会将其忽略并清除,继续读取下一个字符,若缓冲区为空,则继续等待。但是如果读取成功,字符后面的分隔符是残留在缓冲区的,cin>>不做处理。
  • 不想略过空白字符,那就使用 noskipws 流控制。比如cin>>noskipws>>input;

从标准输入读取一行字符串的方法

getline读取一行

C++中定义了一个在std名字空间的全局函数getline,因为这个getline函数的参数使用了string字符串,所以声明在了<string>头文件中了。

getline利用cin可以从标准输入设备键盘读取一行,当遇到如下三种情况会结束读操作:1)到文件结束,2)遇到函数的定界符,3)输入达到最大限度。

函数原型有两个重载形式:

istream& getline ( istream& is, string& str);//默认以换行符结束
istream& getline ( istream& is, string& str, char delim)

例如

#include <iostream>
#include <string>using namespace std;int main() {int flag;cout << "please cin a number" << endl;cin >> flag;cout << "flag: " << flag << endl;cin >> flag;cout << "flag: " << flag << endl;if (flag == 1)cout << "true" << endl;else {cout << "false" << endl;}string data;getline(cin, data);cout << "data: " << data << "data size is :" << data.size() << endl;return 0;
}

输出

please cin a number
1 2 3 4 5 4
flag: 1
flag: 2
false
data:  3 4 5 4data size is :8

tip: cin会从输入缓冲区读取,以空格,tab,回车为界限,而getline会把空格,tab读进来

std::cin详解相关推荐

  1. 【转】C++11 并发指南五(std::condition_variable 详解)

    http://www.cnblogs.com/haippy/p/3252041.html 前面三讲<C++11 并发指南二(std::thread 详解)>,<C++11 并发指南三 ...

  2. C++输入cin详解

    C++输入cin详解 输入原理: 程序的输入都建有一个缓冲区,即输入缓冲区.一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据.正因为cin函 ...

  3. C++11 并发指南五(std::condition_variable 详解)

    前面三讲<C++11 并发指南二(std::thread 详解)>,<C++11 并发指南三(std::mutex 详解)>分别介绍了 std::thread,std::mut ...

  4. C++ cin 详解之终极无惑

    代码编译运行环境:VS2017+Win64+Debug. 文章目录 1.简介 2.常用输入方法 2.1 cin>> 的用法 2.2 cin.get() 的用法 2.2.1 cin.get( ...

  5. C++11 并发指南三(std::mutex 详解)

    上一篇<C++11 并发指南二(std::thread 详解)>中主要讲到了 std::thread 的一些用法,并给出了两个小例子,本文将介绍 std::mutex 的用法. Mutex ...

  6. C++11 并发指南------std::thread 详解

    参考: https://github.com/forhappy/Cplusplus-Concurrency-In-Practice/blob/master/zh/chapter3-Thread/Int ...

  7. c++ std::move详解

    c++ std::move详解 在移动构造中的时候,移动拷贝其实就是把原来参数对象的指针地址给到了构造的对象,再把原先对象的指针置为NULL,这样内存就不会被原来函数给析构了.对于实体的对象执行的其实 ...

  8. 对于刷oj时因为scanf()出现wa而cin却AC的详解 【scanf() 和 cin 详解】

    故事还得从昨天讲起,昨天做了一道题及其的诡异,用cin输入AC了.用scanf()却一直的报错或者陷入了 死循环.这让我很费解,我用了fflush(stdin)来排除,发现没有效果.后来我想起之前写过 ...

  9. std::tie详解

    std::tie:创建左值引用的 tuple,或将 tuple 解包为独立对象 返回值 含左值引用的 std::tuple 对象. 注意 std::tie 可用于解包 std::pair ,因为 st ...

最新文章

  1. 冰豹lua驱动设置_通过编写“猜数字”游戏学习 Lua | Linux 中国
  2. 使用 ABAP 读取每个月的月份名称和编号
  3. linux正向连接shell_[经验] Linux 怎么连接 Xshell?
  4. android switch 未定义,在switch语句中初始化时未定义的变量?
  5. 勒索病毒恐难暴力破解 国内比特币平台尚买币潮
  6. clion打开时如何不自动重新打开上一次的项目
  7. 是几进制_10分钟带你了解什么是二进制
  8. python卷积函数_Convolution卷积算法python以numpy,Matplotlib实现
  9. Numpy学习笔记(三)
  10. 【多目标优化算法】基于分解的多目标进化算法 MOEA/D
  11. leetcode707.设计链表(Python实现)
  12. KnockOut+TypeScript+上传图片(oos功能)以及导入Excel文件(oos功能)并回显插入
  13. AHRS(航姿参考系统)和IMU(惯性测量单元)的区别
  14. 你的水杯里,藏着影响世界的顶级工艺
  15. 魔霸新锐2021版不接显示器开启独显的方式
  16. java word 颜色设置_通过Java设置Word页面背景色过程详解
  17. strip()函数使用方法
  18. fprintf() 函数简介
  19. css-边框重叠问题解决
  20. 恶梦护士 asa_创造小恶梦

热门文章

  1. Unet for TGS Salt Identification Challenge
  2. 58同城的布局html,从58同城看符合seo的网站布局
  3. jQuery 中的事件冒泡和阻止默认行为
  4. 外卖大战“白热化”之后“白领化”,又会怎么打?
  5. Java项目(swing项目)【超市系统管理】【进销存】
  6. 痞子衡嵌入式:IVT里的不同entry设置可能会造成i.MXRT1xxx系列启动App后发生异常跑飞...
  7. 魔兽服务器维护算不算月卡,不要再误会月卡了~精辟! 一名普通玩家对《魔兽世界》月卡的看法...
  8. 使用ruby和python快速开发metasploit自定义模块
  9. 摊牌了,.NET开发者,准备赋能未来
  10. ROS-语音控制-会说话的机器人(1)-ubuntu16.04上安装运行snowboy