首页 文章

c [重复]中getline输入中的错误

提问于
浏览
-1

这个问题在这里已有答案:

嗨伙计们,我从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 回答

  • 4

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

  • 0

    按_键后 cin >> t; 的换行符在调用 getline(cin,s) 时仍在std :: cin中,导致s为空 . 您输入的字符串实际存储在p中 . 在再次使用之前,尝试使用不同的捕获方法或刷新cin缓冲区 .

  • 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;
     }
    

    希望能帮助到你 :)

  • 0

    每次使用cin来获取 cin >> t 中的内容时,它都会在输入缓冲区中留下换行符 . 所以在下一次操作中它会受到影响,并且似乎会跳过"wait for return key"因此异常 . 为了避免使用 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;
      }
    

相关问题