C ++:Getline函数力学

时间:2015-08-04 17:19:11

标签: c++ getline

#include <iostream>
#include <string>

using namespace std;


int main()
{
   int num;
   cin >> num;
   string s;
   getline(cin, s);
   cout << s << " " << num << endl;
   return 0;
}

在此代码中,如果我输入3并按Enter键,则s采用空字符串。

1)如果将第一个字符作为换行符,那么在将整数作为输入后是否有可能将行作为输入?

2)如果我的输入是4567artyu那么它是如何判断7是否必须进入s或num?

3 个答案:

答案 0 :(得分:3)

我建议您始终阅读用户的完整输入行。它会造成最小的混乱。

  • 要求输入。
  • 使用std::getline读取一行输入。
  • 如果您不想要字符串,但是比如整数,请使用std::stoi或(更一般)boost::lexical_cast将输入安全地转换为您想要的目标类型。这是您收集不良投入并向用户抱怨的地方。

我不认为许多用户,如果提示输入数字,则会认为输入42bananas将被接受为42,bananas部分将被“记住”以供日后使用。这很可能是一个错字,用户会很高兴被要求纠正它。

答案 1 :(得分:0)

在以整数作为输入后将行作为输入时,您可以考虑删除杂散&#39; \ n&#39;流中的角色。

#include <iostream>
#include <string>

using namespace std;

int main()
{
   int num;
   cin >> num;
   getchar();
   string s;
   getline(cin, s);
   cout << s << " " << num << endl;
   return 0;
}

这样就可以了。

对于第二个问题,它将4567读为整数,它将继续将其读取为整数,直到达到int的限制,如果达到限制,则在此之后不会考虑任何内容。然后它将int的最大值放在变量numnull中的字符串s中。如果未达到限制,则字符串将保持原样在输入流中,并将由变量s获取。

答案 2 :(得分:-2)

在接受字符串

之前尝试使用cin.clear