首页 > 其他 > 详细

一个不注意细节的错让我很头痛

时间:2020-07-17 10:42:40      阅读:33      评论:0      收藏:0      [点我收藏+]

  昨天给学生写一个快读程序,居然没成功,代码如下:

#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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!