【问题标题】:Running function with std::istream使用 std::istream 运行函数
【发布时间】:2013-11-09 05:31:19
【问题描述】:

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

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”类型的表达式中对“std::istream& {aka std::basic_istream&}”类型的引用进行无效初始化 ..\working.cpp:7:5: 错误:在传递 'int funkcija(std::istream&)' 的参数 1 中

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

【问题讨论】:

  • 不应该是i = funkcija(cin);吗???

标签: c++ istream


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    你正试图传递你已经读过的整数,试试:

    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。所以我在想一个 do-while 循环。还有其他想法吗?
    • @AlesSvetina 更新了答案。
    • 这是可行的。我正在从其中一本书中学习,这就是作业。在书中他们使用 std::istream 并说升级程序以便它运行该函数直到结果为 1。所以我只是假设我必须使用 istream 来做。不管怎样,谢谢你的回答!
    猜你喜欢
    • 1970-01-01
    • 2014-09-15
    • 2023-03-16
    • 2020-12-24
    • 1970-01-01
    • 2014-08-29
    • 2010-11-21
    • 2012-01-01
    • 2011-02-04
    相关资源
    最近更新 更多