簡體   English   中英

使用std :: istream運行功能

[英]Running function with 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:錯誤:類型'int'.. \\ working.cpp類型的表達式對'std :: istream&{aka std :: basic_istream&}'引用的初始化無效:7:5:錯誤:傳遞'int funkcija(std :: istream&)'的參數1

這是什么意思,以及如何解決? 謝謝!

您正在嘗試傳遞已經讀取的整數,請嘗試:

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

我的類型是int而不是istreeam-您正在將i傳遞給函數,因此它抱怨它是int而不是istream。 您可能可以將std :: cin直接傳遞給該函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM