C++中,回车导致cin输入与getline()区别

刷一道题中,出现了先用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(),把回车去除

猜你喜欢

转载自blog.csdn.net/qq_38173631/article/details/104564444