初学 怎么都写不好这个循环 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
img5d
V2EX    C++

初学 怎么都写不好这个循环

  •  
  •   img5d 2019 年 12 月 6 日 5723 次点击
    这是一个创建于 2252 天前的主题,其中的信息可能已经有所发展或是发生改变。
    用 MFC 在写一个计算器,想设计最大数为 15 个字,但是当含有负号和小数点的时候没关系。
    所以我就分为了几种情况
    小于 16 位的时候 直接加
    等于 16 位的时候 判断出了小数点或者负号在的时候 通过 ,否则报个错
    等于 17 位的时候 小数点和符号都在的时候通过,否则报错
    大于 17 位的时候 报错

    debug 的时候 16 位的数字依然就已经可以四则运算了。。
    怎么改改呢。。



    void CMFCApplication1jisuanqiDlg::OnBnClickedButtonplus()
    {
    // TODO: ここにコントロル通知ハンドラ コドを追加します。
    CSring cs;
    GetDlgItemText(IDC_EDITscreen, cs);
    num1 = _tstof(cs);//double num1 = atof((LPSTR)(LPCTSTR)cs.GetBuffer(cs.GetLength()));
    if (cs.GetLength() < 16)
    {
    opt = "+";
    SetDlgItemText(IDC_EDITscreen, _T(""));
    }
    if (cs.GetLength() == 16)
    {
    if (cs.Find(_T(".")) || cs.Find(_T("-")))
    {
    opt = "+";
    SetDlgItemText(IDC_EDITscreen, _T(""));
    }
    else
    {
    SetDlgItemText(IDC_EDITscreen, _T("エラ、入力桁数は1 5位です"));
    }
    }
    if (cs.GetLength() == 17)
    {
    if (cs.Find(_T(".")) && cs.Find(_T("-")))
    {
    opt = "+";
    SetDlgItemText(IDC_EDITscreen, _T(""));
    }
    else
    {
    SetDlgItemText(IDC_EDITscreen, _T("エラ、入力桁数は1 5位です"));
    }
    }
    if (cs.GetLength() > 17)
    {
    SetDlgItemText(IDC_EDITscreen, _T("エラ、入力桁数は1 5位です"));
    }

    }
    15 条回复    2019-12-06 10:45:32 +08:00
    araragi2222
        1
    araragi2222  
       2019 年 12 月 6 日   7
    ???为啥备注是日文 故乡樱花开了??
    img5d
        2
    img5d  
    OP
       2019 年 12 月 6 日 via iPhone
    @araragi2222 这不是重点吧
    freewind
        3
    freewind  
       2019 年 12 月 6 日
    js
    n.toString().replace(/\.\-/g, "").length < 16
    BingoXuan
        4
    BingoXuan  
       2019 年 12 月 6 日
    我看了半天还是云里雾里的。我觉得思路是应该先转化数字再考虑文本表现形式吧。我的理解是,最大数应该是 10 的 16 次方-1,小数精度为 1 位。那么直接判断数字大小就好了,再格式化吧。
    shintendo
        5
    shintendo  
       2019 年 12 月 6 日
    这个判断逻辑好复杂,为什么不这样:取长度存入变量,如果有符号减 1,如果有小数点减 1,最后结果与 15 比较。(假定你做了多个符号多个小数点的检查)
    img5d
        6
    img5d  
    OP
       2019 年 12 月 6 日 via iPhone
    @shintendo 啊啊啊啊 这个厉害!
    shintendo
        7
    shintendo  
       2019 年 12 月 6 日
    @BingoXuan 没说小数精度 1 位吧,而且有可能用户给个超大的数,转换直接爆了
    Tumblr
        8
    Tumblr  
       2019 年 12 月 6 日
    代码为啥不用 script block。。。
    anuding
        9
    anuding  
       2019 年 12 月 6 日 via Android
    @araragi2222 复制的网上的日文教程 /博客吧
    podel
        10
    podel  
       2019 年 12 月 6 日
    楼主为啥不做字符串扫描的。也就那么一点点字符把。另外楼主甚至可以弄一个 button 让别人只能点 button 限制用户输入。
    或者 hook 文本框的输入。每次输入的时候都 check 一下。check 过才让进去。
    si
        11
    si  
       2019 年 12 月 6 日
    CString::Find,函数名称,返回此 CString 对象中与需要的子字符串或字符匹配的第一个字符的从零开始的索引;如果没有找到子字符串或字符则返回-1.
    没找到返回-1,-1 也是 true,找到也会返回 0,0 是 false。
    要全部改成 cs.Find() != -1 吧
    XiaoWangZhanzz
        12
    XiaoWangZhanzz  
       2019 年 12 月 6 日
    难道是跨国友人,也知道 V2E 了
    IGJacklove
        13
    IGJacklove  
       2019 年 12 月 6 日
    老哥不会在日本吧?
    a2ex
        14
    a2ex  
       2019 年 12 月 6 日
    日语注释楼主还不说的原因是对日外包吧
    BingoXuan
        15
    BingoXuan  
       2019 年 12 月 6 日
    @shintendo
    抱歉我说的有歧义,我的意思是 15 位数的时候且有符号允许的小数位。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1230 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 23:39 PVG 07:39 LAX 15:39 JFK 18:39
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86