2013-10-29 33 views
0

我想输入我的函数的值,它是这样的:运行函数的std :: 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 & {aka std :: basic_istream &}'的引用无效初始化''int' .. \ working。 cpp:7:5:错误:在传递'int funkcija(st d :: istream &)'

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

+0

不应该呼叫是'I = funkcija(CIN);'??? –

回答

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); 
+0

谢谢你的回答。我试过了,它可以工作,但我必须连续多次运行该函数,直到结果为1.所以我在考虑一个do-while循环。任何其他想法? – AlesSvetina

+0

@AlesSvetina更新了答案。 –

+0

这是有效的。我正在从其中一本书中学习,这是这项任务。在这本书中,他们使用std :: istream并且说要升级程序,以便它能运行函数,直到结果为1.所以我只是假设我必须用istream来完成。无论如何谢谢你的答案! – AlesSvetina

0

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

相关问题