欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > c/c++ >内容正文

c/c++

C++ cin.sync()和cin.ignore()

发布时间:2023/12/2 c/c++ 49 豆豆
生活随笔 收集整理的这篇文章主要介绍了 C++ cin.sync()和cin.ignore() 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

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

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

cin.ignore(int intExp, char chExp);

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

#include<iostream>

#include<cstdlib>

int main()

{

  int ival1 = 0, ival2 = 0;

  std::cin >> ival1;

  std::cin.ignore(100, '\n');

  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, '\n') ,则不会等待第二次输入,直接输出ival1 = 12 ival2 = 34


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


为什么ival24而不是78呢?

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

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


 

总结

以上是生活随笔为你收集整理的C++ cin.sync()和cin.ignore()的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。