C++ cin , cin.get() , cin.getline()函数

cin

  1. 跳过 Space,Tab,Enter
  2. 跳过Enter 后仍将Enter 保留在缓冲区中

cin.get()

  1. cin.get(char* s(读入数据储存区),streamsize(读入数据大小),char delim(终止符,默认Enter))
  2. 如果缓冲区字符数超过了streamsize,则函数会继续读入,并不会停止;
  3. 当遇到终止符时,函数不会读取终止符,终止符仍在缓冲区中;
    注意:如果第一个字符就是终止符,则函数会设置错误位;

cin.getline()

  1. cin.getline(char* s(读入数据储存区),streamsize(读入数据Enter大小),char delim(终止符,默认Enter))
  2. 如果缓冲区字符超过了streamsize,则函数不仅会停止读入,而且会设置错误为;
  3. 函数会丢弃遇到的终止符;

注意

  1. 如果第一个字符就是终止符,函数不会设置错误位;
  2. 针对第2点的一个说明(看下面的代码:)
//
#include<bits/stdc++.h>
using namespace std;

int main()
{
    char *one;
    one = new char[1];
    //two=char[1];
    cin.getline(one, 5);
    //cin.getline(two,5);
    cout<<one<<endl;
    return 0;
}

运行结果:

iuput:12345
output:1234
/* 注释去掉的话,就会应为two赋值越界而发生运行错误*/

原因有两点:

  1. cin.getline()会根据streamsize而截断一位,并用空字符填补
  2. cin.getline()为动态数据赋值时,情况特殊,不会考虑越界问题,从而造成内存泄漏,不建议使用
    其实,这就像vs2019中对于strcpy_s()用于动态分配的内存时规定必须显式指定赋值数据大小一样。

getline()

  1. getline(stream,string,delim);
  2. 读取并舍弃终止符;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值