【问题标题】:How to pass cin to a function?如何将 cin 传递给函数?
【发布时间】:2018-06-24 06:10:20
【问题描述】:

我正在学习 C++ 中不同的流状态标志/函数,例如 good()、goodbit、bad()、badbit 等。在使用 std::cin 进行测试时,我无法将 cin 作为参数传递给函数(编译器显示很多错误)

#include <iostream>
#include <sstream>

 void print_state (const std::istream& stream) {
    std::cout << " good()=" << stream.good();
    std::cout << " eof()=" << stream.eof();
    std::cout << " fail()=" << stream.fail();
    std::cout << " bad()=" << stream.bad();
} 

int main() {
    std::cin.clear (std::ios::goodbit);
    std::cout << "goodbit: " << print_state(std::cin) << std::endl;

    std::cin.clear (std::ios::eofbit);
    std::cout << "eofbit: " << print_state(std::cin) << std::endl;

    std::cin.clear (std::ios::failbit);
    std::cout << "failbit: " << print_state(std::cin) << std::endl;

    std::cin.clear (std::ios::badbit);
    std::cout << "badbit: " << print_state(std::cin) << std::endl;

    return 0;
}

期望的输出:

goodbit: good()=1 eof()=0 fail()=0 bad()=0
 eofbit: good()=0 eof()=1 fail()=0 bad()=0
failbit: good()=0 eof()=0 fail()=1 bad()=0
 badbit: good()=0 eof()=0 fail()=1 bad()=1

我知道我可以直接用 cin 调用函数,例如std::cin.good(),但我想知道如何将 cin 作为参数传递给函数。

编辑: 我在编译过程中遇到很多错误。一个例子:

F:\cpp_programming\stream_states.cpp: In function 'int main()':
F:\cpp_programming\stream_states.cpp:13:27: error: no match for 'operator<<' (operand types are 'std::basic_ostream<char>' and 'void')
  std::cout << "goodbit: " << print_state(std::cin) << std::endl;
  ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~

【问题讨论】:

  • @Carcigenicate 我已经编辑了问题(添加了显示的第一个错误)

标签: c++ stream arguments cin


【解决方案1】:

由于print_state 不返回值,它不能与插入运算符&lt;&lt; 一起使用。更正此问题的最简单方法是自行调用print_state

print_state(std::cin);

修正后的代码如下:

#include <iostream>
#include <sstream>

 void print_state (const std::istream& stream) {
    std::cout << " good()=" << stream.good();
    std::cout << " eof()=" << stream.eof();
    std::cout << " fail()=" << stream.fail();
    std::cout << " bad()=" << stream.bad();
} 

int main() {
    std::cin.clear (std::ios::goodbit);
    std::cout << "goodbit: "; print_state(std::cin); std::cout << std::endl;

    std::cin.clear (std::ios::eofbit);
    std::cout << "eofbit: "; print_state(std::cin); std::cout << std::endl;

    std::cin.clear (std::ios::failbit);
    std::cout << "failbit: "; print_state(std::cin); std::cout<< std::endl;

    std::cin.clear (std::ios::badbit);
    std::cout << "badbit: "; print_state(std::cin); std::cout << std::endl;

    return 0;
}

回答我自己的问题

cin可以作为函数参数传递给函数,如:

functionName(std::cin);

【讨论】:

    猜你喜欢
    • 2021-08-27
    • 2016-12-11
    • 2016-12-25
    • 1970-01-01
    • 1970-01-01
    • 2016-04-09
    • 2015-10-30
    相关资源
    最近更新 更多