为什么这段代码从标准输入中减少一个输入?

时间:2017-08-24 17:32:37

标签: c++ string io getline

提供输入:     

Input:
    3
    1 2 3 
    4 5 6 7
    8 9 10 11 12
Expected Output:
    1 2 3
    4 5 6 7
    8 9 10 11 12
    但它正在给出输出 -     
 1 2 3
 4 5 6 7
    为什么不给出最后一行?我的代码中有错误吗?

#include <iostream>
#include<stdlib.h>
#include<string.h>
using namespace std;

int main() {
int t;
cin>>t;
while(t--)
{   string str;
    getline(cin,str,'\n');
    cout<<str<<endl;
}
return 0;
}

1 个答案:

答案 0 :(得分:-1)

这是因为cin>>t没有阅读行尾。第一次拨打getline时,你会收到一个空字符串。

我可以想到几种解决这个问题的方法。首先是跳过第一个数字末尾的空格,因为换行符计为空格。不幸的是,这也会在下一行的开头跳过空格。

cin >> t >> std::ws;

另一种方法是使用getline跳过行尾但忽略你回来的字符串。

cin >> t;
getline(cin, str, '\n');