有什么方法可以在一行中执行这两个操作:
fscanf(fp,"%d",&n); std::cout<<n<<std::endl;
即,我正在寻找类似的东西:
的std :: COUT<<的fscanf(fp的,“%d”,&安培; N);<<的std :: ENDL;
显然& n必须被替换.但必须使用FILE *.
解决方法
是的,可以使用,运算符进行内联的fscanf()调用:
#include <iostream> int main() { int n = 0; std::cout<< (fscanf(stdin,&n),n)<<std::endl; }
观看现场演示here.
对于本示例,没有太多好用例,但我至少可以认为这个用例可以保存格式化可读性:
假设您有一个类型T,提供类似void T :: update()的操作;而你懒得将对T :: update()的调用包装成类似std :: ostream&的东西.更新(ostream&,T&)你可以使用这个技巧:
std::array<std::array<T,4>,4> m { // A matrix of T { 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;