做的一个进制转换程序,想给输入的时候做一个容错,就是比如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);
}
}
}
为什么是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;
}
没调试,楼主可以试下