C++字符串的输入和用getline输入遇到的问题

C++中的字符串读入我们通常是用 cin>>str; 它只要碰到空格或者换行符就意味着本字符串读取结束,且不会读取空格和换行符(相当于丛输入流中丢掉)。
而getline函数读取一行字符串,可以读入空格,遇到换行符结束(从输入流中丢掉该换行符),且紧跟后续的getline不会读取到该换行符。但是,注意一点就是:如果只读入了一个换行符(敲了回车),这个换行符虽然不会被读入,但是它会被当作结束符,这个时候什么也没有读入。

举例:

#include<string>
#include<iostream>
using namespace std;

int main()
{
	string str1,str2;
	
	cin>>str1>>str2;
	cout<<str1<<endl;
	cout<<str2<<endl;
	string line;
	getline(cin,line);//遇到回车,结束,不能继续读入
	if(line.empty())
		cout<<"empty";
}

输入输出

zyhz
lc
zyhz
lc
empty

唉,有时候可能会遇到这样的OJ题目,先读入一个整数,再读入若干行带有空格的字符串。
其实学C的时候就碰到过类似的问题,不过后来很长时间没遇到了,也很少再用scanf,printf,gets之类的函数。
再次碰到输入问题的时候,很是惭愧,好多地方都出了差错。
第一次,我竟然想用cin>>string去读取带有空格的字符串,可笑!!!
第二次,我把gets()和getline()混用,出现了意想不到的错误,应该是输入流方式的不同造成的。
以后再也不会将C里面的输入与C++的一块混用了,之前也碰到过这样莫名其妙的错误,但没有引起足够的重视,这次可算被教训了!

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值