使用std :: istream运行函数

时间:2013-10-29 20:46:53

标签: c++ istream

我正在尝试在我的函数中输入一个值,如下所示:

int funkcija( std::istream & in ) {
    int value(0);
    in >> value;
    if(not in) throw std::exception();
    if( value%2 == 0 ) {
        return (value/2);
    }
    else return (value*3)+1;
}

当我尝试运行它时:

int i(0);
std::cout << "Input a number: ";
std::cin >> i;
funkcija(i);

我收到错误: .. \ working.cpp:17:14:错误:'std :: istream&amp;类型的引用无效初始化{aka std :: basic_istream&amp;}'来自'int'类型的表达式 .. \ working.cpp:7:5:错误:传递'int funkcija(std :: istream&amp;)'的参数1

它是什么意思以及如何解决它?谢谢!

2 个答案:

答案 0 :(得分:3)

您正试图传递您已阅读过的整数,请尝试:

std::cout << "Input a number: ";
int i = funkcija(std::cin);
std::cout << i << " ";

虽然这会起作用但似乎很奇怪。考虑将输入和输出处理与计算分开以改进您的设计。将功能更改为:

int funkcija( int value ) {
   if( value%2 == 0 ) {
       return (value/2);
   }
   else return (value*3)+1;
}

也许可以这样称呼:

std::cout << "Input a number: ";
int i;
if( !( std::cin >> i ) ) throw std::exception();
do {
    i = funkcija( i );
    std::cout << i << " ";
} while( i != 1 );

答案 1 :(得分:0)

我的类型为int而不是istreeam - 你将i传递给函数,因此它抱怨它是一个int而不是一个istream。您可以直接将std :: cin传递给函数。

相关问题