C++中GETLIN输入的错误

C++中GETLIN输入的错误,c++,getline,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&

大家好,我从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;
  }

它没有打印任何东西。为什么会发生这种情况?

在cin>>t之后,流中还有一个换行符,那么换行符将被分配给s,所以cout在cin>>t之后,流中还有一个换行符,那么换行符将被分配给s,所以cout我认为这是因为getline没有忽略新行字符,但它会在下一个电话里读到。尝试在每个调用之前放置一个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;
 }

希望有帮助:

我认为这是因为getline没有忽略新行字符,但它会在下一次调用yo getline时读取它。尝试在每个调用之前放置一个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;
 }

希望有帮助:

来自cin>>t的新行;按enter键后,当调用getlinecin时,s仍在std::cin中,导致s为空。您输入的字符串实际上存储在p中。再次使用前,请尝试使用其他捕获方法或刷新cin缓冲区。

来自cin>>t的换行符;按enter键后,当调用getlinecin时,s仍在std::cin中,导致s为空。您输入的字符串实际上存储在p中。再次使用前,请尝试使用其他捕获方法或刷新cin缓冲区。

每次使用cin获取类似于cin>>t的内容时,它都会在输入缓冲区中留下一个换行符。因此,在下一个操作中,它将受到影响,似乎会跳过等待返回键,从而出现异常。要避免这种情况,请忽略

报告说:

从输入序列中提取字符并丢弃它们,直到 已提取n个字符,或者一个字符等于 德利姆

如果文件结尾为空,该函数也会停止提取字符 达到。如果在提取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;
  }

每次使用cin获取类似于cin>>t的内容时,它都会在输入缓冲区中留下一个换行符。因此,在下一个操作中,它将受到影响,似乎会跳过等待返回键,从而出现异常。要避免这种情况,请忽略

报告说:

从输入序列中提取字符并丢弃它们,直到 已提取n个字符,或者一个字符等于 德利姆

如果文件结尾为空,该函数也会停止提取字符 达到。如果在提取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;
  }

为什么姚在这里用了一段时间?因为他想运行循环t次。为什么他不应该?@AdrianMay我的目的是从用户那里获取一个数字和两个字符串作为输入,并打印第一个字符串。实际上,我的原始代码完全不同。我刚刚编写了这段代码,以向您展示我在获取输入时面临的问题。yiu为什么在这里使用一段时间?因为他想运行循环t次。为什么他不应该?@AdrianMay我的目的是从用户那里获取一个数字和两个字符串作为输入,并打印第一个字符串。实际上,我的原始代码完全不同。我刚刚编写了这段代码,以向您展示我在使用时面临的问题input@SurayansTiwari请参阅我的编辑。它表示要提取和编辑的最大字符数忽视您也可以使用其他数字:@SurayansTiwari see my edit。它表示要提取和忽略的最大字符数。你也可以使用其他号码:哈哈哈!SO的人跑得很快。你一定很爱我!哈哈哈!SO的人跑得很快。你一定很爱我!