c++输入避坑

c++输入注意事项

前两天华为笔试,被c++输入坑惨了。有一道题是输入一个矩阵,先输入矩阵的行和列n*m,然后输入了n行字符串,一行字符串就是一行数据。我一开始用cin>>n>>m把行和列读进来,然后再执行n次getline(cin,str)把这n行字符串读进来。结果不知道怎么回事一直少读了一行字符串。下来看了一些博客才终于搞清楚错在哪里了。原来是因为cin>>n>>m的时候输入缓冲区里面还残留了一个\n。所以第一次getline的时候读的是这个\n,导致我的输入一直有问题。于是现在要把c++的输入总结一下,以免后面笔试再出一些乱七八糟的幺蛾子。

c++输入的方式

每个程序都有一个输入缓冲区,当我们从键盘输入数据过后这些数据会被存入输入缓冲区,然后相应的输入函数直接从输入缓冲区当中取数据。当缓冲区中有残留数据时,输入函数会直接取得这些残留数据而不会请求键盘输入。因此我们梳理一下c++常见的这些输入函数是以怎样的方式从输入缓冲区当中取数据的。

cin>>

cin>>它以空格和回车为结束符,并且它会忽略开头的空格和回车,直到遇见和输入类型匹配的字符才开始读取。也就是说,如果输入缓冲区中的字符以回车或者空格开头,那么cin>>会将这些回车或空格从输入缓冲区中取出并丢弃,直到碰到合法的字符,它才真正读取它,这样一直读取直到遇见空格或回车(它不会读这个空格或回车)。做个小实验,我们用cin读取m,n两个数,代码如下:

int m,n;
cin>>m>>n;
cout<<"m:"<<m<<" n:"<<n<<endl;

然后我们从键盘输入字符,首先我们输入一个回车,然后再输几个空格,然后输4,然后再输几个空格,再输5,我们发现m和n被正常读进来了。于是这也证明了cin>>的确是像我们描述的这样工作的。

在这里插入图片描述

getline(cin,str)

结束符为回车,同时可以读回车和空格。它将一行输入(这一行的开头字符不是回车)连着末尾的回车一起读进来。如果输入缓冲区的开始只有一个单独的回车,它也会将它当作一个完整的行。例如,我们想要输入3个字符串,首先我们输入一个回车,然后分别输入两个正常的字符串,最后我们得到的结果是第一次输入的回车被当做了一个字符串。

vector<string
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值