刷一道题中,出现了先用cin输入,再用getline()输入,导致问题出错
如:
#include <iostream>
#include <string>
using namespace std;
string myreverse(string s);
int main()
{
int n;
cin>>n;
string str[n];
//getchar();
for( int i=0;i<n;i++)
{
getline(cin,str[i]);
str[i] = myreverse(str[i]);
}
for(int i=0;i<n;i++)
{
cout<<str[i]<<endl;
}
return 0;
}
string myreverse(string s)
{
char temp;
for(unsigned int i=0;i<s.length()/2;i++)
{
temp = s[i];
s[i] = s[s.length()-1-i];
s[s.length()-1-i] = temp;
}
return s;
}
错误原因:
cin>>n;输入时,从缓冲区中读,当遇到(制表符/空格/回车)停止读,此时缓冲区还剩下(制表符/空格/回车),所以等下面的getline()读入的时候,将回车作为一行,读入。
getline(cin,str[i]); 那getline怎么读呢?
getline读取一行,包括回车符也读到cin中,cin流入到str[i]时,会自动去除’\n’,这也就使getline(cin,str[i])中str[i]获得了一行字符串,该字符不包括回车。
解决:
在cin>>n;读入后,用getchar(),把回车去除