我不知道我的头衔应该是什么。但是,我想对我的代码进行一个很好的验证。
以下是我的函数中唯一允许使用的代码:
c0001、c0002、c0003、c0004、c0005、c0001、c0002、c0003、c0004、c0005。所以,除了这10个代码之外,它不应该接受它,并不断地向用户推荐正确的代码。

if (strlen(meal_choice) == 5 && (meal_choice[0] == 'C' || meal_choice[0] =='c') && meal_choice[1] == '0' && meal_choice[2] == '0' && meal_choice[3] == '0' && (meal_choice[4] == '1' || meal_choice[4] == '2' || meal_choice[4] == '3' || meal_choice[4] == '4' || meal_choice[4] == '5'))

从我上面的代码可以看出,它太长了。知道怎么缩短代码吗?谢谢!

最佳答案

您可以检查字符是否是特定范围内的数字,您可以使用>==<将字符与范围的端点进行比较,因为数字被分配为连续的代码:

... && meal_choice[4] >= '1' && meal_choice[4] <= '5'

您还可以使用sscanf的基本regex类功能进行验证,如下所示:
int res = -1;
sscanf(code, "%*[cC]000%*[1-5]%n",  &res);
if (res == 5) {
    ... // The code is valid
}

上面的代码扫描并忽略格式化的输入(注意百分比符号后面有星号),并用%n读取处理过的字符数。如果处理了所有五个字符,则认为输入有效。
Demo.

关于c - 分解&&和||在C,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47002640/

10-11 19:44