没看错的话,两层括号内是这个表达式:fp1=fopen(filename1,"r")==NULL
根据优先级,==优先于=,故首先计算fopen(filename2,"r")==NULL的值,而==号左边是file*类型,右边是bool常量,因此编译器尝试进行数据类型隐式转换,将bool转成file*,而这是非法的,因此报错。
所谓bool型数据,即该数据只有两个值,true和false,true对应非0值,false对应0。
只要将判断式写成 if( (fp2=fopen(filename2,"r") )==NULL )即可。
老老实实把if的判断变成两句写试试。
bool是布尔值,值只有真true,和假false。你这种写法我没有试过,fp1=fopen(filename3,"w")==NULL 你想想这句到底怎么算? 外面还包了俩括号。
不如写的规范一点把。
先fp1=fopen(filename3,"w");
然后再判断
if(fp1==NULL)。。。。。
试试看。
((fp1=fopen(filename1,"r"))==NULL)
应该是运算符优先级问题你改成上面这样试试