C++输入、输出小结

知识点:(Primer Plus)

  1. cin>>:cin为istream类对象,>>运算符函数原型为istream & operator>>(int &),参数和返回值都是引用,因此cin能够直接修改实参的值
  2. istream类还未字符指针类型重载了>>抽取运算符,所以char[20]; cin>>name;
  3. cin>>跳过空白(空格、换行符和制表符),直到遇到非空白字符
  4. 流状态:eofbit:到达文件尾置1;badbit:文件被破坏置1;failbit:未读取到预期字符或者输入操作没有写入预期字符置1。
  5. 设置状态:clear()形参为三种状态,默认参数为0,也就是三个状态位全部清零,若clear(eofbit),则eofbit将置1,其他清零;setstate()只影响其参数中已设置的位,如setstate(eofbit)则只置位eofbit,其他不受影响。
  6. exceptions()返回一个位掩码,指出哪些标记导致异常被引发。std::exception类派生出一个ios_base::failure异常类,包含一个what()方法。
  7. clear()重置流状态后,导致输入异常的不匹配输入仍在输入队列中,一种方法是一直读取字符,知道到达空白,用isspace()检查,在空白字符时返回true;另一种是丢弃行中的剩余部分,判断cin.get() != '\n'。
  8. 清除流中数据,sync()清除缓存区内容,ignore(num, '\n')清除指定字符。
  9. 单字符输入,get(&char)和get(void)提供不跳过空白的单字符输入功能,前者返回cin对象,后者返回字符编码(int值)。
  10. 单字符输入时,如果希望跳过空白(包括'\n'),则使用cin>>(cin碰到空白符自动跳过,但并不表示输入流中的空白符消失了,只是被cin忽略了,如果使用完cin后使用不跳过空白符的get()函数,则空白符会被读取,见下面问题1);如果希望读取每个字符,使用get(&char)更佳。
  11. 字符串输入,默认读取整行,get(char*, int, char);getline(char*, int, char)。第二个参数要比读取的最大字符大1,因为包含储存结尾的空字符,前者会将换行符留在流中,需小心,后者会舍弃换行符。


问题:

1、cin>>和getline()混用需小心

  cin>>a;
  //cin.clear();
  //cin.sync();
  //cin.ignore(1);
  cin.getline(b,10);
以上程序在输完a后,会自动跳过getline函数
原因:cin输入完后会将换行符\n留在输入流中,所以getline读到的是\n,用sync()清除缓存区内容,或ignore()清除指定字符,解决该问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值