从文件读取并在一行中写入cout

时间:2018-07-07 06:42:04

标签: c++ file-handling

有什么办法可以同时执行这两项操作吗?

fscanf(fp,"%d",&n);
std::cout<<n<<std::endl;

即,我正在寻找类似的东西:
    std::cout<<fscanf(fp,"%d",&n);<<std::endl;

显然&n必须替换。不过必须使用FILE*

1 个答案:

答案 0 :(得分:12)

是的,可以使用fscanf()运算符内联进行,调用:

#include <iostream>

int main()
{
    int n = 0;
    std::cout<< (fscanf(stdin,"%d",&n),n)<<std::endl;
}

观看现场演示here


在当前示例中,没有很多好的用例,但是我可以认为至少有一个用例可以节省格式的可读性:

假设您的类型为T,提供了类似void T::update();的操作,而且您懒得将对T::update()的调用包装成类似std::ostream& update(ostream&,T&)的东西,则可以使用此类型技巧:

std::array<std::array<T,4>,4> m { // A matrix of T
    { T::create() ,T::create() ,T::create() ,T::create() } ,
    { T::create() ,T::create() ,T::create() ,T::create() } ,
    { T::create() ,T::create() ,T::create() ,T::create() } ,
    { T::create() ,T::create() ,T::create() ,T::create() }
};

// ....

using u = T::update;
std::cout << "Current matrix state:\n" <<
(m[0][0].u(),m[0][0]) << ',' (m[0][1].u(),m[0][1]) << ',' (m[0][2].u(),m[0][2]) << ',' (m[0][3].u(),m[0][3]) << '\n' <<
(m[1][0].u(),m[1][0]) << ',' (m[1][1].u(),m[1][1]) << ',' (m[1][2].u(),m[1][2]) << ',' (m[1][3].u(),m[1][3]) << '\n' <<
(m[2][0].u(),m[2][0]) << ',' (m[2][1].u(),m[2][1]) << ',' (m[2][2].u(),m[2][2]) << ',' (m[2][3].u(),m[2][3]) << '\n' <<
(m[3][0].u(),m[3][0]) << ',' (m[3][1].u(),m[3][1]) << ',' (m[3][2].u(),m[3][2]) << ',' (m[3][3].u(),m[3][3]) << '\n' <<
flush;