昨天给学生写一个快读程序,居然没成功,代码如下:
#include<iostream>
#include<cstdio>
using namespace std;
int readint()
{
char ch=0;
int zs=0,fh=1;
do
{
ch=getchar();
}
while(ch!=‘-‘&&(ch>‘9‘||ch<‘0‘));
if(ch==‘-‘)fh=-1;
else zs=ch-‘0‘;
while(ch=getchar()&&ch>=‘0‘&&ch<=‘9‘)
{
zs=zs*10+ch-‘0‘;
}
zs=zs*fh;
return zs;
}
int main()
{
int a;
a=readint();
cout<<a;
return 0;
}
经多方跟踪、调试、复查均未找到错因。根据以往经验,这种错很难发现,但有一个不太靠谱的方法解决:换个时间重写一个。今天一大早马上重写快读,基本思路不变,竟然真的成功了。然后把两个程序一比对便找到了原因。ch=getchar()&&ch>=‘0‘&&ch<=‘9‘这里的优先级出问题了,“=”赋值语句的优先级比&&的优先级低,所以,系统把把这一句解释为ch=(getchar()&&ch>=‘0‘&&ch<=‘9‘),而我设计的初衷是(ch=getchar())&&ch>=‘0‘&&ch<=‘9‘。
原文:https://www.cnblogs.com/wendcn/p/13328156.html