c ++中getline输入中的错误

时间:2014-10-20 13:00:47

标签: c++ getline

大家好我在从getline获取输入时遇到一个未知错误。我的目的是从用户那里取一个数字和两个字符串作为输入并打印第一个字符串。这是问题代码

#include <iostream>
using namespace std;

int main() {
  int t;
  cin>>t;
  while(t--)
   {    string s,p;
        getline(cin,s);
        getline(cin,p);
        cout<<s;
   }
  return 0;
  }

现在我提供的输入如下:

1
abababa abb
b

它没有打印任何东西。为什么会这样?

4 个答案:

答案 0 :(得分:4)

cin>>t之后,流中还有换行符,然后换行符将分配给s,因此cout<<s似乎什么都不打印(实际上,它会打印换行符) 。
 在第一个cin.ignore(100, '\n');之前添加getline以加入换行符。

答案 1 :(得分:0)

我认为这是因为getline()不会忽略新行字符,但它会在下一个调用yo getline中读取它。试试你在每个calle之前放一个getline(),如下所示:

Int main() {
int t;
cin>>t;

string s,p;

getline(cin,s);

while(t--)
{  
    getline(cin,s);
    getline(cin, p);
    getline(cin,p);
    cout<<s;
 }

希望有所帮助:)

答案 2 :(得分:0)

当调用cin >> t;时,按下回车后来自getline(cin,s)的换行符仍然在std :: cin中,导致s为空。您输入的字符串实际存储在p中。尝试使用不同的捕获方法或在再次使用之前冲洗cin缓冲区。

答案 3 :(得分:0)

每次使用cin来获取cin >> t中的内容时,它都会在输入缓冲区中留下换行符。所以在下一次操作中它会受到影响并且似乎跳过&#34;等待返回键&#34;因此异常。为避免使用cin::ignore

documentation说:

  

从输入序列中提取字符并将其丢弃,直到   要么提取n个字符,要么比较等于   DELIM。

     

如果文件结尾是,该函数也会停止提取字符   到达。如果过早达到(在提取n之前)   字符或查找delim),该函数设置eofbit标志。

我已经用非常容易理解的方式编写了代码但是正常工作 如果您有任何问题,请告诉我

#include <iostream>
using namespace std;

int main() {
  int t=0;
 cout<<"Enter t\n";
  cin>>t;
  cin.ignore(); 
  while(t>0)
   {    string s,p;
        cout<<"Enter s\n";
        getline(cin,s);
        cout<<"Enter p\n";
        getline(cin,p);
        cout<<" Values s:"<<s<<" p:"<<p<<"\n";
        t--;
   }
  return 0;
  }