[互联网] 不知道哪里错了?

[复制链接]
查看174 | 回复0 | 2023-6-1 03:41 | 显示全部楼层 |阅读模式
问题:
不知道哪里错了?

#includestdio.h
#includestdlib.h
void main(int argc, char* argv[])
{
  char ch;
  FILE *fp;
  if(argc!=2)
{
  printf(Arguments error!\n);
  exit(-1);
  }
  if((fp=fopen(argv[1 ],r))==NULL)
{
  printf(Can't open %s file!\n,argv[1]);
  exit(-1);
  }
  while(ch=fgetc(fp)!=EOF)
  putchar(ch);
  fclose(fp);
}




推荐答案:
程序没有任何语法错,可以编译运行,但要得到正确结果,问题是你错在运算符优先级上了
在 while(风法国战持士外缺已原ch=fgetc(fp)!=EOF)中,因为逻辑运算符继煤弱劳升围它片!=的优先级高于赋值运算符=,所以会先计算fgetc(fp)!呢八元=EOF,相当于ch=(fgetc(fp)!=EOF),所以ch的结果在正常循环时永远为1
正确的应该是
while ((ch = fgetc(fp)) != EOF)
改好后就可以了
【玉璞集 YUPUG.COM】