是否可以用一行代码从std :: cin中提取格式化的输入?

时间:2017-10-17 00:39:53

标签: c++ stream

假设我有一个函数compute_number(float k);并且在我的程序中,我需要以一些用户输入作为参数调用此函数一次。实现格式化输入的直观方式是:

int main()
{
...
float input_numbr;
std::cin >> input_numbr;
compute_number(input_numbr); 
...
}

但问题是,我已经声明并使用了一个额外的变量float input_numbr,我永远不会再使用它。我觉得这很浪费。

所以我的问题是,是否有办法将这三条线合二为一。必须有某种方法来规避创建附加变量以从输入流中获取一次性格式化键盘输入的需要。我想的是:

compute_number(cin.get());

然而,问题是cin.get()没有格式化输入;它只返回流中接下来出现的任何字符的ASCII值。

那么有没有办法像这样调用compute_number(cin.next_formatted_input())?或者必须创建一个临时保存格式化cin值的附加变量。

1 个答案:

答案 0 :(得分:2)

  

但问题是,我已经声明并使用了一个额外的变量float input_numbr,我永远不会再使用它。我觉得这很浪费。

嗯,我不同意(提倡代码可读性),但是你去了:

 template<typename T>
 T getinput(std::istream& is) {
     T result;
     is >> result;
     return result;
 }

应该做你想做的事。你可以写

 compute_number(getinput<float>(std::cin));

然后。虽然变量仍然涉及(并且需要)。