张小桐 2019-06-17 20:14 采纳率: 0%
浏览 403
已采纳

求助大佬,这个字符串输入容错怎么做?

做的一个进制转换程序,想给输入的时候做一个容错,就是比如5进制只能输入1-4,16进制只能输入1-F,这是我写的一个容错不管用,求助大佬

printf("请输入你要转换的%d进制数\n", flag);         //输入转换的数
    scanf("%s", num);
    len = strlen(num);
    for (int j = 0; j < len; j++)
    {
        if (flag < 10)
        {
            while (num[j]<'0' || num[j]>(flag + '0')||num[0]!='-')
            {
                printf("请输入正确的数0-%d\n", flag - 1);
                scanf("%s", num);
            }
        }
        else if (flag == 12)
        {
            while (num[j]<'0' || num[j]>'9' || num[j] != 'A' || num[j] != 'B' || num[0] != '-')
            {
                printf("请输入正确的数0-B\n");
                scanf("%s", num);
            }
        }
        else if (flag == 16)
        {
            while (num[j]<'0' || num[j]>'9' || num[j] != 'A' || num[j] != 'B' ||
                num[j] != 'C' || num[j] != 'D' || num[j] != 'E' || num[j] != 'F' || num[0] != '-')
            {
                printf("请输入正确的数0-F\n");
                scanf("%s", num);
            }
        }
    }

  • 写回答

1条回答 默认 最新

  • 杉杉唯落晖 2019-06-18 17:32
    关注

    为什么是num[0] !=‘-’呢,你要转负数吗?还有ABCDEF的ASCII码也是连续的噢,还有建议你分函数做呢像这样:

    bool checkNumber(const char *_pNum, int flag)
    {
        while(*_pNum++ != '\0')
        {
            if(flag <= 10)
            {
              #if(0)
                if(*_pNum < '0' || *_pNum >= ('0' + flag))//在0-flag中间就继续,不在返回错误,结束后返回正确
                    return false;
                else
                    continue;
              #else
                if(*_pNum >= '0' && *_pNum <= ('0' + flag - 1))//第二种判断方法,思路和下面的一样
                    continue;
                else
                    return false;
              #endif
            }
            else
            {
                if(*_pNum >='0' && *_pNum <= '9')
                    continue;
                else if(*_pNum >= 'a' && *_pNum <= ('a' + flag - 11))
                    continue;
                else if(*_pNum >= 'A' && *_pNum <= ('A' + flag - 11))//在上3种中间继续,不在返回错误,
                    continue
                else
                    return false
            }
        }
        return true;
    }
    

    没调试,楼主可以试下

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 MATLAB怎么通过柱坐标变换画开口是圆形的旋转抛物面?
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿