【问题标题】:getline C++ not getting result that is required [duplicate]getline C++没有得到所需的结果[重复]
【发布时间】:2013-06-14 17:22:08
【问题描述】:

编译器版本为4.2g++

#include <iostream>
#include <string>
using namespace std;
int main()
{

string a[10];
int i;
int N;
cin>>N;
for (i=0; i<N; i++)
{
    getline(cin,a[i]);
}
return 0;
}

当我输入 2 时。它要求输入一次。当 3 次 2 次。等等。请解决。谢谢。

【问题讨论】:

标签: c++ getline


【解决方案1】:

第一个getline 调用读取end-of-line 在读取N 后仍位于输入缓冲区中的字符。

将其视为以下输入:

3 First string
Second string
Third string

在你的情况下,第一个字符串是空的。

如果您想忽略N 之后的空格,请写类似

cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n')

(将跳到行尾),或

cin >> N >> std::ws;

(将跳过所有空白字符,包括行尾)。

【讨论】:

  • 那我该如何纠正呢?使用什么功能?
  • 我已经更新了答案。
【解决方案2】:

输入N 的值后,缓冲区中还剩下一个\n(行尾)字符。第一个 getline 将其视为第一个字符,并返回一个空字符串。只需这样做:

string a[10];
int i;
int N;
cin>>N;
cin.ignore(INT_MAX);//flush buffer
for (i=0; i<N; i++)
{
    getline(cin,a[i]);
}

这将在for() 循环之前刷新缓冲区。

【讨论】:

  • 这表示交互式输入。当从文件重定向标准输入时,这样的解决方案将表现不正确。
【解决方案3】:

问题在于,当按下回车键或空格键时,它也将其作为输入

 #include <iostream>
 include <string>
 using namespace std;
   main()
 {

string a[10];
int i;
 int N;
 cin >> N >> std::ws;
for (i=0; i<N; i++)
{

getline(cin,a[i]);

}
 return 0;
}

【讨论】:

  • 嗯,实际上要求输入 N 次 :)
  • @Inspired 我没听懂你
  • 我的意思是这段代码按假设等待用户输入 N 次,但 a[0] 仍将包含一个空字符串。
  • @Inspired thnx for u edit i have changed
猜你喜欢
  • 2019-07-03
  • 1970-01-01
  • 2016-12-12
  • 2018-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-02
  • 2021-11-09
相关资源
最近更新 更多