zoukankan      html  css  js  c++  java
  • C++ cin.ignore() 的使用

    cin.sync()的功能是清空缓冲区,而cin.ignore()虽然也是删除缓冲区中数据的作用,但其对缓冲区中的删除数据控制的较精确。

    有时候你只想取缓冲区的一部分,而舍弃另一部分,这是就可以使用cin.ignore(),其使用方法是:

    cin.ignore(int intExp, char chExp);

    其中intExp 是一个整型表达式,也可以是一个整型数值,这个数值表示在一行中忽略的字符的最大数目,比如说intExp=100;还有一个参数chExp,是一个字符表达式。表示如果遇到一个字符值等于chEXP,那么就停止ignore(),如果ignore100个字符之后还没遇到值等于chEXP的字符,那也得停止ignore(),所以100是ignore()所忽略的最大字符数。
    下面是几个例子

    #include<iostream>
    #include<cstdlib>
    int main()
    {
      int ival1 = 0, ival2 = 0;
      std::cin >> ival1;
      std::cin.ignore(100, '
    ');
      std::cin >> ival2;
      std::cout << "ival1 = " << ival1 << std::endl;
      std::cout << "ival2 = " << ival2 << std::endl;
      system("pause");
      return 0;
    }

    ①按下Enter后,ival1接收了12,剩余的都被清除掉了,因为Enter就是本身就是空行符,然后输入流会等待第二次输入为ival2赋值。如过没有中间那句std::cin.ignore(100, ' ') ,则不会等待第二次输入,直接输出ival1 = 12 ival2 = 34:

    ②把std::cin.ignore(100, ' ') 改成std::cin.ignore(2, ' ')呢,ival1接收了12之后,ignore清除掉两个字符:

    为什么ival2是4而不是78呢?

    因为我们所用的IO对象cin cout 都是操纵char数据的,不管我们输入的是什么数据,cin cout 都会转成 char来处理,例如我们想要输出的是一个整形变量的值,那么在输出前,cout会将该变量的值转成字符,在进行输出(C++ Primer Plus中有一句话:In essence, the C++insertion operator adjusts its behavior to fit the type of data that follows it.),所以上面ignore清除掉了一个空格和一个字符3,所以缓冲区中剩余4、56、78,所以ival2等于4.

    ③如果cin.ignore()不给参数,则默认参数为cin.ignore(1,EOF),即把EOF前的1个字符清掉。

  • 相关阅读:
    boostrapvalidator
    bootstrap 整理
    emil 的使用
    sass笔记
    sql 语句的优化
    多线程笔记
    mysql笔记
    react
    优雅的创建map/list集合
    spring中路径的注入
  • 原文地址:https://www.cnblogs.com/fangzm/p/14122073.html
Copyright © 2011-2022 走看看