【问题标题】:error in getline input in c++ [duplicate]C ++中的getline输入错误[重复]
【发布时间】:2014-10-20 13:00:47
【问题描述】:

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

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

【问题讨论】:

  • 为什么 yiu 在这里使用while
  • 因为他想循环运行 t 次。他为什么不应该呢?
  • @AdrianMay My purpose is to take a number and two strings as input from the user and print the first string.
  • 实际上我的原始代码完全不同,我刚刚编写了这段代码来向您展示我在输入时遇到的问题

标签: c++ getline


【解决方案1】:

cin&gt;&gt;t之后,流中还有一个换行符,那么这个换行符会被分配给s,所以cout&lt;&lt;s好像什么都不打印(其实就是打印一个换行符)。
在第一个 getline 之前添加 cin.ignore(100, '\n'); 以引入换行符。

【讨论】:

  • @SurayansTiwari 查看我的编辑。
  • 表示要提取(和忽略)的最大字符数。你也可以使用其他号码:)
【解决方案2】:

每次您使用 cin 获取类似cin &gt;&gt; t 的内容时,它都会在输入缓冲区中留下一个换行符。所以在下一次操作中它会受到影响,并且似乎会跳过“等待返回键”,因此会出现异常。为了避免这种情况,请使用cin::ignore

documentation 说:

从输入序列中提取字符并丢弃它们,直到 n 个字符已被提取,或者一个比较等于 分隔符。

如果文件结尾是,该函数也会停止提取字符 到达。如果过早地达到这一点(在提取 n 字符或查找分隔符),该函数设置 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;
  }

【讨论】:

  • 哈哈哈! SO的人很快。你一定很喜欢!
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    我认为这是因为 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;
     }
    

    希望对你有帮助:)

    【讨论】:

      猜你喜欢
      • 2011-07-15
      • 2012-11-12
      • 2014-04-26
      • 2015-12-14
      • 2016-02-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多