繁体   English   中英

C ++:Getline函数力学

[英]C++ : Getline Function Mechanics

#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)如果将第一个字符作为换行符,那么在将整数作为输入之后是否有可能将line作为输入?

2)如果我的输入是4567artyu,那么它如何确定7是否必须输入s或num?

我建议您始终阅读用户的完整输入内容。 这将引起最少的混乱。

  • 要求输入。
  • 使用std::getline读取一行输入。
  • 如果您不希望使用字符串而是一个整数,请使用std::stoi或(更通用的) boost::lexical_cast将输入安全地转换为所需的目标类型。 在这里,您会发现不好的输入并向用户投诉。

我认为,如果提示输入数字,许多用户不会希望输入42bananas被接受为42,然后“记住” bananas部分。 这很可能是错字,要求用户更正它很高兴。

对于在将整数作为输入之后将line作为输入,您可以考虑从流中删除杂散的'\\ n'字符。

#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的限制为止;如果达到limit,则此后将不考虑任何内容。 然后它会把INT的最大值在变量numnull INT字符串s 如果未达到限制,则字符串将按原样保留在输入流中,并由变量s获取。

接受字符串之前尝试使用cin.clear

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM