为什么在第二次迭代之后跳过第一个字符

时间:2019-01-14 04:23:15

标签: getline

代码部分:

 int t; 
    cout<<"Enter a no."; 
    cin>>t;

    while(t--){
    cout<<"Enter a string :"<<endl;

    string str;
    cin.ignore();

    getline(cin,str);
    cout<<"You entered :"<<str<<endl<<endl;
}

Output

Enter a no. 3
Enter a string :
It is working
You entered :It is working

Enter a string :
It is working
You entered :t is working

Enter a string :
It is working 
You entered :t is working

为什么从第2次迭代开始跳过第一个字符。任何帮助都将受到欢迎。

1 个答案:

答案 0 :(得分:0)

cin>>t;从用户读取一个号码。由于用户必须在数字后按Enter键,因此您需要cin.ignore()来忽略换行符。但是,在循环中,您使用getline,它将读取整行。自从您读完整行内容后,就没有什么可以忽略的。因此,您需要将cin.ignore()移到 循环之前。

我个人希望始终从用户那里读取行,因为这是我希望用户输入的内容。