cin 和 getline()

       今天又遇到了一点小问题:原来的一个程序用 cin 输入一个数字后接着用 getline() 输入一个 string 类,简化版的语句为:cin >> a; getline(cin, str); 本来打算输入数字,接回车键,然后输入一串字符,但结果所输入的一串字符并没有被赋值都 str 中。

        经过查找,发现了问题所在:假设 a  为 int 类型,则 cin >> a 执行时会读取并抛弃前面的空格和回车,直到发现在 int 类型的输入,然后使用空白(空格、制表符、和换行符)来确定 int 类型的结束位置,但该空白依旧会被保留在输入流中,而暂时没有被读取。上面就是因为 cin >> a 执行后回车换行符依旧保留在输入流中,而 getline(cin, str) 读取的正是该回车换行符,而不是后面的字符串。

        解决办法:先读取回车换行符再把字符串赋给 str 这里可以用到 cin.get() 函数,第一可以直接调用该函数在 cin >> a 后面加一行 cin.get() 即可,第二由于 cin >> a 返回的是 cin 对象,因此可以这样调用 (cin >> a).get() 。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值