std::cin C++标准输入流

这篇具有很好参考价值的文章主要介绍了std::cin C++标准输入流。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

用了那么久的c++,都没有深入去学习一下c++的标准输入流(cin),标准输出流的(cout)的用法,一般只是简单的使用去获取一个字符串或者几个整型输入。但是发现如果遇到了比较复杂的输入,这简单的三板斧就不够用了,需要考虑空白符(空格,tab,换行符等)的影响。而c++又提供了cin.get,cin.getline,std::getline,等不同的类方法和全局函数,没深入的了解的咋一看就有点晕,这几个函数到底有啥区别?又有哪些坑?

首先可以推荐一下参考这篇博文,说的也比较详细了:(30条消息) std::cin使用_mayue_csdn的博客-CSDN博客

 下面是我自己的一些补充。

1、可以利用cin.peek()函数判断是否结束输入

例如这样的场景,需要输入多行,第一行为多个整型数据,直到遇到换行结束,需要存入一个vector中

vector<int> numbers; 

while (std::cin >> number) {

        numbers.push_back(number);

        if (std::cin.peek() == '\n') {

            break;

        }

    }

peek() 函数窥视输入流中的下一个字符,但是不取出,可以通过这个判断下一个字符是否是换行符

2、std::cin返回值

关于cin的返回值,如果读取没有错误,cin返回true,如果读取失败,返回false,例如:

int num;

while (std::cin >> num)

{}
输入:123 aaa

在上面的例子中,在读取到第二个数字时,因为aaa是非数字,因此无法转换城int,cin返回false,跳出循环

3、cin读取标准输入的时候,默认会过滤掉空白字符(如空格 TAB 回车),如果不想过滤空白字符,需要使用std::noskipws,如:

    stringstream ss;

    cout << "输入字符串:";

    char ch;

    while (std::cin >> ch)

    {

        ss << ch;

        if (cin.peek() == '\n') {break;}

    }

    cout << ss.str() << endl;

输入:123 456

输出:123456

以上为cin默认行为,会默认忽略”123 456“之间的空格符

    stringstream ss;

    cout << "输入字符串:";

    char ch;

    while (std::cin >> std::noskipws >> ch)

    {

        ss << ch;

        if (cin.peek() == '\n') {break;}

    }

    cout << ss.str() << endl;

输入:123 456

输出:123 456

以上例子,因为使用了noskipws,就会读取到”123 456“之间的空格符

4、std::istringstream类

std::istringstream,跟std::cin的行为很像,不同的是,cin是从标准输入读取数据,而istringstream是从字符串中读取数据,如下面的例子:

int main() {

    std::string str = "123 46 444";

    std::istringstream iss(str);

    std::vector<int> vec;

    int num;

    while (iss >> num) {

        vec.push_back(num);

    }

    for (int n : vec) {

        std::cout << n << ' ';

    }

    std::cout << '\n';

}

上面的例子是从字符串中读取输入,然后把三个数字存入vector中文章来源地址https://www.toymoban.com/news/detail-479116.html

到了这里,关于std::cin C++标准输入流的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • c++ 11标准模板(STL) std::vector (二)

    c++ 11标准模板(STL) std::vector (二)

    template     class T,     class Allocator = std::allocatorT class vector; (1) namespace pmr {     template class T     using vector = std::vectorT, std::pmr::polymorphic_allocatorT; } (2) (C++17 起) 1) std::vector 是封装动态数组的顺序容器。 2) std::pmr::vector 是使用多态分配器的模板别名。 元素相继存储,这意味着不

    2024年02月02日
    浏览(9)
  • 【C++】标准库 — 正则表达式 std::regex

    从 C++11 起,标准库增加了正则表达式 ( Reg ular Ex pression) — std::regex ,包含在头文件 regex 中。 描述字符序列的方法,用于字符(串)的模式/模糊匹配。 用途 ,一般只有两种用途: 查找 (是否包含,找出来) 标识 释义 seq sequence 表示目标序列 r regex 表示模式,即正则表达式

    2024年02月11日
    浏览(8)
  • 都说 C++ 没有 GC,RAII: 那么我算个啥?(赠书福利)

    都说 C++ 没有 GC,RAII: 那么我算个啥?(赠书福利)

    *以下内容为本人的学习笔记,如需要转载,请声明原文链接 微信公众号「ENG八戒」https://mp.weixin.qq.com/s/7A9-tGZxf4w_7eZl3OUQ4A 学过 Java、C# 或者其他托管语言(managed languages)的同学,回过头来看 C++ 的时候,第一反应就是 C++ 没有自动垃圾回收器(GC),而不能充分利用的资源被称为垃

    2024年02月05日
    浏览(7)
  • C++随机数生成:std标准库和Qt自带方法

    std::rand() 是C++中的一个随机数函数,它生成一个范围在0到 RAND_MAX 之间的伪随机整数。 在每次程序运行时,通常需要使用不同的种子值来初始化随机数生成器。可以使用 std::srand() 函数来设置种子值。 设置种子的目的是为了引入随机性,使得每次程序运行时生成不同的随机数

    2024年01月16日
    浏览(13)
  • 【C++】详解用标准库的std::mt19937生成随机数

    2023年8月16日,周三晚上 写了1个半小时 目录 概述 英文文档 什么是mt19937 什么是状态大小 头文件 std::mt19937的常用成员函数 1. 构造函数: 2. 种子操作函数: 3. 随机数生成函数: 4. 辅助函数: 生成种子值 方法1:使用std::random_device 方法2:使用时间戳 举例说明 英文文档 std:

    2024年01月17日
    浏览(23)
  • C++ 标准库随机数:std::default_random_engine

    库头文件 #include random  

    2024年02月08日
    浏览(10)
  • C++三剑客之std::variant(二):深入剖析

    C++三剑客之std::variant(二):深入剖析

    std::variant系列 C++三剑客之std::variant(一) : 使用-CSDN博客 C++三剑客之std::variant(二):深入剖析-CSDN博客 目录 1.概述 2.辅助类介绍 2.1.std::negation 2.2.std::conjunction 2.3.std::is_destructible 2.4.std::is_object 2.5.is_default_constructible 2.6.std::is_trivially_destructible 2.7.std::in_place_type和std::in_place_index 3.原

    2024年01月18日
    浏览(6)
  • 记录--用了那么久的Vue,你了解Vue的报错机制吗?

    记录--用了那么久的Vue,你了解Vue的报错机制吗?

      相信大家对Vue都不陌生。在使用Vue的时候也会遇到报错,也会使用浏览器的F12 来查看报错信息。但是你知道Vue是如何进行异常抛出的吗?vue 是如何处理异常的呢?接下来和大家介绍介绍,Vue是如何处理这几种常见的报错的。 先和大家说说常见的五种处理报错的方法 error

    2024年02月05日
    浏览(7)
  • 深入理解和应用C++ std::shared_ptr别名构造函数

    在现代C++中,智能指针是一个极为重要的工具,尤其std::shared_ptr以其自动内存管理、引用计数和多线程安全性等特性深受开发者喜爱。其中一个不太常用但功能强大的构造方式是 别名构造函数 ,它允许我们创建一个共享相同底层对象但是指向其内部不同数据成员或子对象的

    2024年01月16日
    浏览(12)
  • VScode自动滚屏cin、input输入问题解决方法

    VScode自动滚屏cin、input输入问题解决方法

    VScode 是一个轻量的文本编辑器,微软出品。很多人把它作为主要开发工具写代码,因为它几乎是万能的,想要什么功能就装什么插件,可以适用于几乎任何编程语言。同时有很多主题可选,颜值较高。在笔者的使用中以下二个问题较为常见,也是非常影响使用体验的问题。一

    2024年02月04日
    浏览(6)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包